历史背景
简要概述一下C++这些年来的变化。
C++20 是继 C++11 之后的下一个重要 C++ 标准。与 C++11 一样,C++20 从根本上改变了现代 C++ 的编程方式。这一变革主要源于语言中新增的 概念(Concepts)、模块(Modules)、范围(Ranges) 和 协程(Coroutines)。
为了更好地理解 C++ 进化中的这一步重大进展,让我简要回顾一下 C++20 的历史背景。
C++ 已经有约 40 年的历史了。以下是过去几十年中发生的主要变化概述:
C++98
在上世纪 80 年代末,Bjarne Stroustrup 与 Margaret A. Ellis 合著了著名的《C++ 参考手册注释版》(The Annotated C++ Reference Manual,简称 ARM)。这本书有两个重要作用:
- 在多种实现并存的环境下定义 C++ 的功能
- 成为首个 C++ 标准 C++98(ISO/IEC 14882)的基础
C++98 的一些核心特性包括:模板、标准模板库(STL)及其容器和算法、字符串以及输入输出流。
C++03
C++03(ISO/IEC 14882:2003)是对 C++98 的一次技术修正,改动非常小,以至于在时间线上几乎无法体现。在社区中,包含 C++98 的 C++03 被称为 传统 C++。
TR1
2005 年,一件令人兴奋的事情发生了:所谓的 技术报告 1(TR1)正式发布。TR1 是迈向 C++11 以及现代 C++ 的关键一步。TR1(标准编号 TR 19768)基于 Boost 项目,该项目由 C++ 标准化委员会成员发起。它包含了 13 个库,这些库最终被纳入 C++11 标准。例如:正则表达式库、随机数库、智能指针和哈希表。只有某些特殊的数学函数直到 C++17 才被加入标准。
C++11
我们称 C++11 标准为 现代 C++。这个名称也常用于指代 C++14 和 C++17。C++11 引入了许多彻底改变 C++ 编程方式的新特性。例如,它不仅包含了 TR1 的内容,还引入了移动语义、完美转发、可变参数模板和 constexpr。此外,C++11 首次为多线程提供了内存模型,并标准化了线程 API,奠定了并发编程的基础。
C++14
C++14 是一个较小的版本。它带来了读写锁、泛化的 lambda 表达式,以及扩展的 constexpr 函数支持。
C++17
C++17 既不是大版本也不是小版本,它有两个突出的特性:并行 STL 和标准化的文件系统 API。标准模板库中的约 80 个算法现在可以并行执行或进行向量化处理。与 C++11 类似,Boost 库对 C++17 的影响也非常深远。Boost 提供了文件系统库,并引入了新的数据类型:std::string_view、std::optional、std::variant 和 std::any。