返回

文章详情

正统 C++

Hacker News2026年6月13日 13:58

目录 什么是正统 C++? 为什么不使用现代 C++? 为什么使用正统 C++? 正统 C++ 中的 Hello World 我应该使用什么? 使用现代 C++ 的特性安全吗? 修订历史 还有其他类似的想法吗? 代码示例 这篇文章最初作为一个 gist 发表在这里。 什么是正统 C++? 正统 C++(有时称为 C+)是 C++ 的一个最小子集,它改进了 C,但避免了所谓现代 C++ 中的所有不必要的东西。它与现代 C++ 的定义完全相反。 为什么不使用现代 C++? 在 1990 年代末,我们也曾是当时的现代 C++ 追随者,使用最新的特性。我们告诉每个人他们也应该使用这些特性。随着时间的推移,我们学到了,并不是所有语言特性都有必要使用,或者曾用的特性证明是坏的(如 RTTI、异常和流),或因不必要的代码复杂性而反作用。如果你认为这毫无意义,只需再等几年,你也会讨厌现代 C++(“为什么我不再花时间使用现代 C++”归档的 LinkedIn 文章)。 为什么使用正统 C++? “在 C++ 内部,有一种更小、更简洁的语言努力想要脱颖而出。”——比雅恩·斯特劳斯特鲁普 使用正统 C++ 限制编写的代码库将更易于理解、更简单,并且可以与旧编译器构建。使用正统 C++ 子集编写的项目将更容易受到其他 C++ 项目的接受,因为正统 C++ 使用的子集不太可能违反采用者的 C++ 子集偏好。 正统 C++ 中的 Hello World: #include <stdio.h> int main() { printf("hello, world\n"); return 0; } 我应该使用什么? 类似 C 的 C++ 是一个好的开始,如果代码不需要更复杂,请不要添加不必要的 C++ 复杂性。一般情况下,代码应该对任何熟悉 C 语言的人来说都是可读的。 不要这样做,正统 C++ 中“设计原则”的结尾应该立即在“相当简单,且可用。EOF。”之后。 不要使用异常。异常处理是唯一一个需要复杂运行时系统显著支持的 C++ 语言特性,它也是唯一一个即使你不使用也会产生运行时成本的 C++ 特性——有时在每个对象构造、销毁和 try 块进/出时,会产生额外隐藏的代码,并且总是会限制编译器的优化器所能做的事情,往往大幅度限制。然而,C++ 异常规范在编译时并未得到强制执行,因此你甚至无法知道你是否忘记处理某些错误情况! 在风格上,异常风格的错误处理与 C 的错误返回码并不非常协调,这在编程风格上造成了真正的分歧,因为大量的 C++ 代码必然调用底层 C 库。 不要使用 RTTI。不要使用 C++ 运行时包装器来包含 C 运行时(<cstdio>、<cmath> 等),请使用 C 运行时(<stdio.h>、<math.h> 等)。不要使用流(<iostream>、<sstream> 等),请使用 printf 风格的函数。不要使用 STL 中任何分配内存的东西,除非你不在乎内存管理。请参见 CppCon 2015:安德烈·亚历山德鲁“std::allocator 与分配的关系正如 std::vector 与烦恼的关系”演讲,以及为什么许多 AAA 游戏开发工作室选择不使用 STL 线程以获取更多信息。 不要过度使用元编程进行学术自我满足。适度使用,仅在必要时,并且在减少代码复杂性时使用。谨防任何在当前标准 C++ 中引入的特性,理想情况下,等待下一版本标准对这些特性的改进。例如,C++11 中的 constexpr 在 C++14 中变得可用(根据 Jason Turner cppbestpractices.com 的策展人)。 不要使用模块。使用模块带来了以下缺点:需要重写(可能是重构)你的代码。失去可移植性。模块二进制文件(除了 MSVC)不具可移植性,因此你仍需为库提供头文件。项目构建设置变得更加复杂。除最新版本外的任何工具链版本都无法工作(在撰写时,苹果的模块支持被列为“部分支持”)。作为交换,普通开发者将得到以下优点:没有。 使用现代 C++ 特性安全吗? 由于编译器、操作系统发行版等对 C++ 标准的采用滞后,通常无法立即开始使用新的有用语言特性。一般指导是:如果当前年份是 C++ 年 + 5 年,那么开始选择性地使用 C++ 年的特性是安全的。例如,如果标准为 C++11,并且当前年份 >= 2016,那么很可能是安全的。如果标准要求编译你的代码的 C++ 是 C++17,而年份是 2016,那么显然你正在践行“简历驱动开发”方法。如果你是为开源项目这样做,那么你并没有创建出其他人可以使用的东西。 修订历史 更新:截至 2025 年 1 月 14 日,正统 C++ 委员会批准选择性使用 C++20。2025 年 10 月 19 日 - A

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡