光明日报
C++的诞生:一段跨越时空的史诗,并不意味着 C++ 完全抛弃了 C语言。相反,C++在相当长时间内保持了较高程度的 C语言兼容性,使原有系统代码🔮能够逐步迁移,也让开发者可以在同一个项目中同时使用过程式、面向📢对象和泛型等不同风格。
面向对象机制解决了部分模块化问题。开发者可以把状态和操作封装在类中,通过访问控制限制外部依赖,再用继承和组合组织更大的系统。对于图形界面、游戏引擎、金融系统和工业软件等复杂项目,这类组织方式能够改善代码边界,但并不能自动保证设计合理,实际效果仍取决于架构和实现。
C++标准化进程改变了语言的发展方式。早期版本主要依靠编译器实现和书籍传播,随着不同平台和厂商采用 C🔍++,语法差异、库行为差异以及兼容性问题越来越明显,建立统一标准成为生态继续扩🔮大的必要条件。
C++的技术源流可以分为“抽象能力”和“底层能力”两条支线。前一条支线来自 Simula,后一条支线来自 C语言,二⭐者的结合决定了后来 C++ 的基本气质。
这一阶段的重要特点是实验先于标准。新特性是否保留,不只取决于理🎵论上的优雅程度,还取决于编译器能否实现、程序员是否容易使用,以及生成的程序是否🎯足够高效。C++后来强调“零开销抽象”,与这一时期的工程取舍密切相关。
早期 C++的设计重点并不是堆积尽可能多的语法,而是让新机制能够与既有 C语言代码和工具协同工作。类提供封装,继承提供层次化组织,虚函数提供动态多态,模板则让同一套算法能够适用于多种类型。各种机制共同扩展了 C语言的表达范围,却没有强制所有程序都采用单一编程范式。
Stroustrup 曾使用过 Simula,并认可☀️类和对象在组织复杂系统方面的价值。但在当时的实际环境中,Simula 🤔的运行效率和系统支持难以满足大型工程需求。因此,他选择以 C语言为基础,逐步加入类、访问控制、构造函数等机制,这个早期版本被称为“C with Classes”。
C++名称的出现,标志着这门语言不再只是 C语言的临时扩展。1983 年,语言名称从“C 🤔with Classes”改为“C++”。其中,++是 C语言中的自增运算符,通常被理解为“在 C 的基础上继续前进”,也体现了语言与 C语言之间的继承关系。
从 Simula 的对象思想,到 C语言的系统能力,再到贝尔实验室中的工程实践,C++的发展始终围绕一个实际问题展开:怎样让程序员处理越来越复杂的软件,同时不放弃对性能、内存和平台的控制。这个问题没有一次性的终点,因此 C++也一直处于持续修订和重新解释之中。