C++ 从诞生至今已近半个世纪。很多同时代的编程语言已逐渐退出历史舞台,而 C++ 不仅没有被取代,反而依然活力十足。
2022年12月,一个不为人注意的转折点悄然发生:C++ 在 TIOBE 编程语言排行榜上超越 Java,成为世界第三大流行的编程语言。到 2024 年底,它更是攀升至第二位,仅次于 Python。这一里程碑没有登上头条,没有引发网络热议,也没有什么"新 C++"的营销活动。然而,在服务器集群、游戏引擎、自动驾驶汽车和航天器中,世界早已运行在 C++ 之上。
几十年来,C++ 默默无闻地在后台运行,隐藏在图形用户界面和浏览器之下,存在于用户从未接触过的代码之中。
这门诞生于 1970 年代、源于一次"学术挫折"的语言,是如何在一轮又一轮的抽象革新、技术潮流和替代尝试中幸存下来的?要回答这个问题,让我们回到 C++ 诞生于贝尔实验室的那一刻。

C++ 的诞生
20 世纪 70 年代末,贝尔实验室。比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)正在调试一个模拟程序。他苦思冥想,试图解决一个分布问题——他需要模拟计算机系统如何相互通信,以及如何在负载、故障和变化条件下运行。当时他考虑了两种语言:一种是Simula 67,这门语言有着优雅的面向对象结构,提供了完美的模型,但运行速度太慢;另一种是BCPL,虽然速度够快,但语法极其丑陋,每次尝试抽象都异常痛苦。对斯特劳斯特鲁普来说,这两种语言都无法满足他的需求。

于是在 1979 年,斯特劳斯特鲁普开始编写自己的解决方案。他将其命名为**"带类的 C"**(C with Classes)。他希望在保持 C 语言速度的基础上,最小化地嫁接 Simula 的结构。当时,他并非想创造一个改变世界的语言,他只是想让自己的程序能够正常运行。
然而,仅仅几个月内,他的这个**"解决方案"就成功编译、运行,并交付了实际成果。这个方案集成了继承的类、强类型以及能编译成高效二进制文件**的功能,它巧妙地将这些前所未有的特性结合在一起。到 1983 年,这个实验获得了新名称:C++。这个名字其实是一个玩笑,为了致敬了 C 语言中的增量运算符(++)。比雅尼表示,这不是一场革命(revolution),而是一次演变(evolution)。
随后,这门语言迅速在全球走红。到 1980 年代末,大学开始向学生教授 C++,企业也纷纷采用它进行开发。这一切源于 C++ 带来了当时所有语言都缺乏的特性:在不牺牲速度的情况下实现结构化,在没有虚拟机(VM)的情况下实现代码重用,以及一种能够直接与硬件"对话"的代码组织方式。
强大的代价
1980 年代末到 1990 年代,C++ 开始出现了多个编译器,还衍生出很多种方言。虽然都基于同一门语言,但当时 C++ 尚无任何统一标准。GCC、Borland、微软都发布了各自版本的 C++。程序员们不得不小心翼翼地在代码中兼容不同的编译标准,因为同一段代码在不同编译器上可能会产生完全不同的结果(想想就可怕)。
与此同时,C++ 也在不断扩展其功能:多重继承、抽象基类、模板和 STL、异常、命名空间、编译时多态等特性被陆续加入。虽然每项功能都解决了实际问题,但同时也使 C++ 变得越来越难以学习、使用、理解和维护。

C++98 标准的奠基
1989 年,一个正式的标准化委员会 WG21 成立。经过多年审慎讨论,他们在 1998 年发布了 C++98,这是 C++ 的第一个官方国际标准。委员会将语法、语义、标准库、模板等所有核心内容都编入了官方标准。C++ 从此有了统一接口和全球身份标识(common interface 和 global identity)。
此时,C++ 已经风靡软件世界。当时最强大的操作系统(Windows、Linux 子系统)和**企业应用程序(包括大名鼎鼎的 Photoshop、Office)**都是用它开发的。图形引擎和 3D 游戏也几乎完全由 C++ 编写。
托瓦兹的警告
C++ 的强大也带来了代价。C++ 让开发者可以对程序底层有足够的控制,但同时也要求程序员负责许多底层的程序逻辑,如手动内存管理、指针运算等。由于这些操作难以建立有效的防护措施,C++ 容易出现内存泄漏、缓冲区溢出和各种未定义行为。
在 Linux 社区,Linux 内核的架构师林纳斯·托瓦兹对 C++ 发出了强烈警告,并禁止在内核开发中使用它。他曾说:"C++ 是一种可怕的语言。用它来制造彻头彻尾的垃圾代码要容易得多。"他认为 C++ 鼓励抽象,这导致牺牲了代码的清晰度,尤其是在低级系统代码中。他批评 STL 和泛型代码使行为更难预测,而在内核工作中,不可预测性就是最大的危险。
低谷与的重生
21 世纪 00 年代初,c++新的竞争者相继出现:Java、C#、Python。这几门语言不但内存安全,而且语法简单,所以这些语言从问世之后获得了非常好的发展。而C++开始显得“迟缓”——不是在执行速度上,而是在演变速度上。当C++03 发布后,开发者们期待的下一版本 “C++0X” 却迟迟未果。可在表象之下,c++这门语言的根基正在发生潜移默化的变化:这时候非官方的、实验性的Boost 库出现了:这个库提供了智能指针、Lambda 表达式、编译时技巧等现代模式,这让Boost 成为了 C++ 下一阶段的试验场。
不可或缺的底层支柱
即使在低谷的时期,C++ 仍然是IT世界里很多程序的必要的选择。比如:
- 高频交易:在金融领域,每一纳秒都至关重要。脚本语言的垃圾回收机制太慢,C++ 为数十亿美元的交易提供底层基础设施。
- 游戏:虚幻引擎、CryEngine、Frostbite 都用 C++ 编写。没有托管语言能匹配实时交互式 3D 所需的性能。
- 嵌入式系统:汽车、航空航天等对性能和资源控制有严格要求的领域,C++ 屹立不倒。
C++11:语言的重启

经过近十年的准备,c++总算走上了飞速发展的道路。2011 年发布的 C++11,感觉就像一次重启。它引入了:
auto类型推导- Lambda 表达式
- 标准库中的智能指针
- 移动语义
- 多线程支持
constexpr编译时求值
开发者称之为 “现代 C++”。代码看起来更简洁、更安全、更可预测,而性能却丝毫未被牺牲。
未来可期
新的节奏与持续演进
C++11 之后,C++ 找到了新的节奏:每三年发布一个新标准:
- C++17 带来了结构化绑定、
std::optional、variant、文件系统。 - C++20 引入了模块、概念和协程,解决了头文件、泛型约束和异步代码的长期缺失问题。
如今,C++ 是多范式的语言:过程式、面向对象、泛型和函数式。

无处不在的 C++
在这个由软件驱动的世界中,C++ 依然在当代的IT世界最关键基础设施中扮演着不可替代的位置:
- AI 深度学习:AI虽然在由python主导,可 ****TensorFlow 和 PyTorch 的底层是 C++。
- 浏览器:Chrome 的 Blink、Firefox 的 Gecko 大部分是 C++。
- 数据库:MySQL、PostgreSQL、MongoDB 都包含关键的 C++ 代码。
- 在虚拟现实、机器人技术、嵌入式系统中,C++ 都无处不在。
新的问题
到了 2023 年,业界面临一个新的问题:C++ 是否足够安全?手动内存管理和不受限制的指针带来了风险。大型科技公司开始推动使用内存安全的语言。
2025 年 3 月,斯特劳斯特鲁普公开回应:他呼吁帮助捍卫 C++,对抗被误解。C++ 必须进化。

未来:共存而非替代
到了今天,虽然c++已经被python远远甩到了后边,但是c++依然还是占据着非常重要的位置:
- Python 更容易,但它的速度来自于C++ 库。
- Java 和 C# 更安全,但它们的 VM(虚拟机)机制导致语言性能完全无法和c++匹敌。
- Rust 强制执行安全,但缺乏 C++ 的生态系统。
它不是最新的潮流,但它始终是构建未来的语言。C++ 凭借其无与伦比的性能和底层控制力,将继续作为基础设施的支柱,与其它语言共存共荣,共同驱动我们所处的数字世界。
1126

被折叠的 条评论
为什么被折叠?



