返回介绍

11.2 技术上的成功

发布于 2024-08-19 12:44:36 字数 1529 浏览 0 评论 0 收藏 0

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_ptrchronoformatscoped_lock),也带来了很多其他库的改进。

C++ 的目的是成为构建应用程序的工具,许多用 C++ 开发的伟大应用程序,例如在(§2.3)和(§10.1)章节提到的那些,是 C++ 真正的成功。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文