文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
11.2 技术上的成功
C++ 成功的根本原因很简单——它填补了编程领域的一个重要的生态位
:
需要有效使用硬件和管理高复杂性的应用程序
如果你能负担得起浪费
25% 甚至 99% 的硬件机能,那可供选择的编程语言和环境就多了。如果你的底层模块需要仅仅千行的底层代码,C 语言或者汇编语言可以效劳。40 年以来,C++ 的独特生态位
足以使其社区不断成长。
这里有一个现代(2014 年)的 C++ 总结:
- 直接映射到硬件
- 指令和基本数据类型
- 最初来自于 C 语言
- 零开销抽象
- 带构造和析构函数的类、继承、泛型编程、函数对象
- 最初来自于 Simula 语言(当时还不是零开销的)
Simula 开创了许多抽象机制和一个灵活的类型系统,但在运行时间和空间成本上,它们带来了沉重的代价。与 1995 年的 C++(§2.1)描述相比,关注点从编程技术转向了问题领域。这更多的是解释风格和人们兴趣的不同,而不是语言设计的不同。这两个总结现在和当时都是准确的。
在过去几十年的基础上,21 世纪的关键技术进步包括:
- 内存模型(§4.1.1)
- 类型安全的并发支持:线程和锁(§4.1.2)、并行算法(§8.5)、汇合线程(§9.4)
- 类型推导:
auto
(§4.2.1)、概念(§6)、模板参数推导(§8.1)、变参模板(§4.3.2) - 简化使用:
auto
(§4.2.1)、范围for
(§4.2.2)、并行算法(§8.5)、范围(§9.3.5)、lambda 表达式(§4.3.1) - 移动语义(§4.2.3)
- 编译期编程:
constexpr
(§4.2.7)、编译期循环(§5.5)、可确保的编译期求值和容器(§9.3.3)、元编程(§10.5.2) - 泛型编程:STL(§10.5.1)、概念(§6)、用户定义类型作为模板参数(§9.3.3)、lambda 表达式(§4.3.1)
- 元编程(§10.5.2)
它们都与零开销原则相关,但最后两个有点令人惊讶,因为在 2006 至 2020 年期间内,C++ 对它们的支持并不完全。
假如 C++ 分裂成互不兼容的方言,或者成为你无法长期依赖的东西,以上这些就都失去意义了:
- 稳定性和兼容性至关重要(§1.1)(§11.4)
新特性(C++11 以来)带来了标准库的改进(例如:unique_ptr
、chrono
、format
和 scoped_lock
),也带来了很多其他库的改进。
C++ 的目的是成为构建应用程序的工具,许多用 C++ 开发的伟大应用程序,例如在(§2.3)和(§10.1)章节提到的那些,是 C++ 真正的成功。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论