文章摘要
文章提倡使用"正统C++"(Orthodox C++),即仅采用能改进C语言的C++必要特性,避免现代C++的复杂功能,保持代码简洁高效。作者认为现代C++过于复杂,而正统C++更适合实际项目开发。
文章总结
正统C++:回归简洁的编程之道
文章概览
本文最初发布于2016年1月16日,作者提出了"正统C++"(Orthodox C++)的概念,主张使用C++语言中最接近C语言的简洁子集,避免现代C++中不必要的复杂特性。
核心概念
什么是正统C++?
正统C++(有时称为C+)是C++的一个最小子集,它在改进C语言的同时,避免了现代C++中所有不必要的特性。这与现代C++的理念完全相反。
为何不用现代C++?
作者回顾90年代使用当时"现代"C++特性的经历,指出许多特性最终被证明是不必要的(如RTTI、异常和流),或导致了不必要的代码复杂性。作者引用一篇题为《为什么我不再使用现代C++》的文章佐证这一观点。
为何使用正统C++?
引用Bjarne Stroustrup的话:"在C++内部,有一个更小更简洁的语言正试图挣脱出来。"使用正统C++限制编写的代码库更易于理解、更简单,并且能用较旧的编译器构建。
实践指南
正统C++的"Hello World"
```cpp
include
int main() { printf("hello, world\n"); return 0; } ```
使用建议
- 从类C的C++开始,避免不必要的复杂性
- 不使用异常处理机制
- 不使用RTTI(运行时类型识别)
- 使用C运行时头文件(如
)而非C++包装版本(如 ) - 使用printf风格函数而非流(如
) - 谨慎使用STL中会分配内存的组件
- 适度使用元编程,避免学术性滥用
- 对新标准特性保持谨慎,通常等待5年后再考虑采用
- 不建议使用模块(modules)特性
现代C++特性的采用时机
由于编译器、操作系统等对C++标准的采纳滞后,通常建议在新标准发布5年后再选择性使用其特性。例如,C++11的特性在2016年后使用相对安全。
类似理念
文章列举了多个与正统C++相似的理念: - 嵌入式C++ - 名义C++ - 理智C++ - "保持C++简单"理念
代码示例
提供了多个符合正统C++理念的开源项目示例,包括: - DOOM 3 BFG - Qt(当构建时不使用RTTI和异常时) - dear imgui - bgfx(作者自己的项目) - TheForge - Oryol - Network Next SDK
结语
作者通过bgfx项目的使命声明表达了自己的理念:通过提供跨平台、图形API无关的渲染库来赋能游戏开发者。文末邀请读者通过赞助支持这一使命。
(注:本文保留了原文的主要技术观点和论证逻辑,删减了部分重复性列举和次要的参考资料链接,同时确保了中文表达的流畅性和技术准确性。)
评论总结
以下是评论内容的总结:
支持"正统C++"的观点
认为C++应保持接近C的简洁性
- "Basically, stick with C and leave C++ programmers alone." (评论1)
- "Orthodox C++, to me, is C plus the one good feature of C++: you don't have to type struct all the time." (评论10)
反对现代C++复杂特性
- "Don't use exceptions... Don't use RTTI... Don't use stream" (评论8引用原文)
- "I've been doing embedded systems in C++ since rocks were young, and this is a great summary of what to avoid." (评论14)
反对"正统C++"的观点
认为限制过多会失去C++优势
- "That's the core feature of the language. Not using it doesn't make any sense." (评论24关于RTTI)
- "printf is type-unsafe and bug-prone. Also modern C++ standards have better formatting utilities." (评论24)
支持现代C++特性
- "There are many programs that are impossible to write in a finite time without metaprogramming." (评论8)
- "Smart pointers are good... Lambdas are a good feature." (评论13)
中立/其他观点
建议使用其他语言
- "At this point, if you want better C, just use Zig." (评论9)
- "Might as well use Rust... using C++ over Rust is kind of stupid in 2026" (评论22)
认为C++子集选择存在分歧
- "Somewhere within c++ there is a subset of c++ that is a great language. The problem is that no one agrees on which subset that is." (评论18)
指出文章不足
- "The point on exceptions I think is also misleading... the happy path inexpensive" (评论20)
- "Hard to take seriously." (评论23关于模块)
总结显示评论者对"正统C++"存在明显分歧,支持者看重简洁性和可控性,反对者则认为过度限制会丧失C++的现代优势,另有部分评论者建议直接转向其他现代语言。