C++ 从 C++ 98 版本到今年确定的 C++23,共经历了 6 个版本的迭代。上面这张图里,列出了每次版本更新变化的内容。顶部黑体字的大小说明了版本变化的大小,其中 C++14 是字体最小,这个版本是 C++11 的增量版本,之所以没有大的变动,是因为当时未能对一些特性是否要纳入标准达成一致。
在 C++98 和 C++11 中间还有个 C++03 版本,这个版本不是 C++03 的一个重要版本,因为它主要是对 C++98 标准的修订和修正,并没有引入重大的新特性或显著的语言改进。C++03 主要致力于解决 C++98 中的一些缺陷和不明确之处,使标准更加稳定和一致。
下面简要说一下 C++ 版本的主要变化历史:
-
C++98:这是第一个 ANSI/ISO 标准化的 C++ 版本,发布于 1998 年。它基于 Bjarne Stroustrup 于 1985 年创建的原始 C++ 设计,并加入了一些重要特性,如 STL(标准模板库)、异常处理、I/O Streams、命名空间和 RTTI(运行时类型识别)。
-
C++03:这个版本主要是对 C++98 的一些修正和改进,发布于 2003 年,并未引入新的语言特性,所以一般不把它当做重要版本,存在感也不强。
-
C++11:这是 C++ 历史上最重大的更新之一,有时被称为 C++0x(因为它原计划在 200x 年发布,一直跳票)。它引入了大量新特性,如自动类型推断(auto 关键字)、基于范围的 for 循环、Lambda 表达式、智能指针、并发支持、移动语义、nullptr 和更强大的模板功能等。
-
C++14:作为 C++11 的小幅度更新,C++14 引入了一些改进和新特性,包括泛型 Lambda 表达式、返回类型推导、二进制字面量、数字分隔符、弃用属性等。
-
C++17:这个版本进一步提升了 C++ 的功能和易用性,新功能不是很多,引入了结构化绑定、if constexpr、std::optional、std::variant、std::string_view、并行算法等特性。
-
C++20 是继 C++11 之后又一个重大更新,引入了概念(concepts)、范围库(ranges)、协程(coroutines)、模块(modules)、三元运算符的改进、constexpr 的增强、std::span 等新特性。
-
C++23 是 2023 年 7 月份刚确定下的新标准,目前能完整支持 C++23 的编译器基本没有。变化包括引入标准库的模块化支持、扩展 constexpr 、增加并行算法、ranges 扩展、this 推导、引入更多的属性和注解、增加 std::mdspan、std::generator 等新特性。
C++23 没有将网络库纳入标准,又让 C++ 爱好者捶胸顿足,这等到花儿都谢了。C++ 是为数不多的没有标准网络库的主流语言,想想真是头大。
目前,有用到 C++20 标准的公司,如果碰到这样的公司,是 C++ 程序员的幸福。C++ 每个版本的更新,都会提供部分便利的基础设施,简化代码设计。
也是因为 C++ 一直坚持的向后兼容性,让 C++ 变得越来越臃肿。但我们可以不用学会所有特性,C++ 本来就是设计成支持多种编程范式的语言,选择满足需要的特性就好。C++ 的设计也影响了很多新出现的编程语言。
C++ 出现以后,不时会有新的编程语言要取代 C++ 的地位,到目前为止,还没有这样的语言出现。C++ 依旧生机勃勃,在大模型数据处理领域也越发重要。
《Thriving in a Crowded and Changing World: C++ 2006–2020》 C++ 之父的这篇论文,详细描写了 2006 - 2020 这些年 C++ 的变化过程,值得一看。