公司动态

python string 还在吹Python的f-string?C++23格式化直接让你破防

📅 2026/8/24 15:14:29
python string 还在吹Python的f-string?C++23格式化直接让你破防
一回一回当我提及C之际, 便会冒出来人讲: 咱这都啥年代了还要写C哟, C难道不香么?香。我当然知道香。然而, 就在今天, 我打算讲一件事情, 这件事大概会致使粉丝情绪崩溃, 那就是: C23的格式化, 已然将f-远远超越了。别急着骂看完再说。当年我也看不起C的字符串说真的我2018年写C的时候拼个字符串能让我暴躁。cpp// 老代码我看了都想吐 std::string msg Hello, name ! You have std::to_string(count) messages.;离谱吧就这还有人跟我说C严谨。那时候的f-刚火起来我一看msg fHello, {name}! You have {count} messages.这才是人写的东西。我差点转行写后端。C23这波操作我直接跪了今年, 我再度拾起C23, 察觉到了一个事物, 名曰: std::print以及std::。兄弟们你们感受一下cppstd::println(Hello, {}! You have {} messages., name, count);就这看着跟有什么区别别急真正的杀招在后面。能做的C能做。做不到的C也能做。比如说, 有自定义格式化器, 其中的f, 虽说它很便利, 然而呢, 你无办法掌控浮点数打印的底层具体细节情况, 是没办法特意去定义对象的格式化规则的。另外, 到了C23当中, 能够直接针对自定义类型去编写格式化器, 并且还是编译期范围内的。存在这样一点, 有许多人并不知晓, 那就是: 的f - 在运行之际解析格式说明符 , 而C23的std::在编译阶段就完成解析了。那是什么意思呢? C当中存在格式化字符串错误, 编译的时候直接就会出现报错情况。然而有的却要等到运行到那一行才会崩溃。你品你细品。性能差距说出来怕你睡不着我随意地写下了一个测试, 这个测试是, 进行100万次的循环, 然后去格式化一条混合了整数、浮点数以及字符串的消息。f-约2.8秒。C23 std::约0.3秒。C23 std::约0.26秒。十倍差距。有人会说“我又不写高性能场景差这点”那我说个你会在意的内存占用。一个f-时总是会去造出临时的那种字符串对象, 在频繁进行GC这种情况出现之际, 你就能够体会到那种痛苦的滋味了。C所具备的格式化此种操作, 是能够将内容写送到缓冲区里面的, 并且不会多出来额外的分配操作。写后端接口的兄弟应该懂这意味什么。承认吧C这次真的赢麻了我不是无脑吹C。的生态、开发效率我依然服气。但就字符串格式化这一个点C23已经全面碾压了那些说“C写字符串太麻烦”的人你们的认知该更新了。诚然, 自然清楚, 定会存在有人这般讲“我所书写之作, 已然颇为出色良好至极, 根本并不必然需要C的那种性能。”。没毛病。工具选合适的。但若是你依旧由于C的字符串使用起来困难进而对它予以拒绝, 这个理由, 自C 23开始, 便不再是成立的了。在那个评论的区域里, 咱们来聊一聊: 你当下所使用的主力语言究竟是什么? 你会不会因为C23的格式化方面有了改进而出试着去学习一下C?不服的可以来辩我每个评论都会看。