C++ 语言标准
C++ 语言的标准可以分为 C++98、C++03、C++11、C++14、C++17 和 C++20 这几个标准。后面的数字表示标准制定的年份,例如 C++98 是 1998 年的标准、C++03 是 2003 年的标准、C++11 是 2011 年的标准,以此类推。
时间 | 标准名称 | 制定组织 | 事件 |
---|---|---|---|
1998 | C++98 | ISO & IEC | 1998 年 C++ 标准得到 ISO 和 ANSI 批准。以后每 5 年视实际需要更新一次。 |
2003 | C++03 | ISO & IEC | 2003年通过了 C++ 标准第二版。 |
2011 | C++11 | ISO & IEC | 2011年发布了 C++ 标准第三版 C++11,取代现行的 C++98 和 C++03。此次标准为 C++98 发布 13 年来第一次重大修正。 |
2014 | C++14 | ISO & IEC | 2014年发布了 C++ 标准第四版 C++14,是 C++11 的增量更新。 |
2017 | C++17 | ISO & IEC | 2017年发布了 C++ 标准第五版 C++17,是 C++14 的增量更新。 |
2020 | C++20 | ISO & IEC | 2020年发布了 C++ 标准第六版 C++20,是自 C++11 版本发布以来最大的一次版本更新。 |
C++ 98 标准
第一个 C++ 标准,1998年发布。正式名称为 ISO/IEC 14882:1998。
绝大多数编译器都支持 C++98 标准。不过当时错误地引入了 export 关键字。由于技术上的实现难度,除了 Comeau C 编译器 export 关键字以外,没有任何编译器支持 export 关键字。并且这个标准对现代的一些编译理念有相当的差距,有很多在高级语言都应当有的功能,它都没有。这也正是后来需要制定 C++11 标准的原因所在。
C++ 03 标准
第二个 C++ 标准,2003年发布。正式名称为 ISO/IEC 14882:2003。这个标准仅仅是 C++98 修订版,与 C++98 几乎一样,没做什么修改。仅仅是对 C++98 做了一些 “勘误”,就连主流编译器 (受 C99 标准影响)都已支持的 long long 都没有被加入 C++03 标准。
C++ 11 标准
第三个 C++ 标准,2011年8月12日发布。正式名称为 ISO/IEC 14882:2011。
由 C++ 标准委员会于 2011年8月12日公布,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于现行标准的草案(编辑上的修正)。C++11 包含了核心语言的新机能,并且拓展 C 标准程序库,并且加入了大部分的 C++ Technical Report 1 程序库(数学上的特殊函数除外)。此次标准为 C++98 发布后 13 年来第一次重大修正。
注意: C++11 标准(ISO/IEC 14882:2011)与 C11 标准(ISO/IEC 9899:2011)是两个不同的标准,后者是 C 语言的标准。
C++ 14 标准
第四个 C++ 标准,2014年8月18日发布。正式名称为 ISO/IEC 14882:2014 。
2014年8月18日,ISO 组织在其网站上发布文章称:C++ 作者 Bjarne Stroustrup 称,主要的编译器开发商已经实现了 C14 规格。C14 是 C++11 的增量更新,主要是支持普通函数的返回类型推演,泛型 lambda,扩展的 lambda 捕获,对 constexpr 函数限制的修订,constexpr变量模板化等等。
C++14 是 C++ 语言的最新标准,正式名称为 “International Standard ISO/IEC 14882:2014(E) Programming Language C++”。C++14 旨在作为 C++11 的一个小扩展,主要提供漏洞修复和小的改进。C++14 标准的委员会草案(Committee Draft)N3690 于2013年5月15日发表。工作草案(Working Draft)N3936 已于2014年3月02日完成。最终的投票期结束于2014 年8月15日,结果(一致通过)已于8月18日公布。
C++ 17 标准
第五个 C++ 标准,2017年12月5日发布。正式名称为 ISO/IEC 14882:2017。
C++17 是继 C++14 之后,C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称。旨在使 C++ 成为一个不那么臃肿复杂的编程语言,以简化该语言的日常使用,使开发者可以更简单地编写和维护代码。
C++ 17 是对 C++ 语言的重大更新,引入了许多新的语言特性。包括:UTF-8 字符文字、折叠表达式(Fold Expressions)、内联变量(Inline Variables)、在 if 和 switch 语句内可以初始化变量、结构化绑定(Structured Binding)、类模板参数规约(Class Template Argument Deduction)等等。
C++ 20 标准
第六个 C++ 标准,2020年12月15日发布,正式名称为 ISO/IEC 14882:2020。
C++20 是一次重大的更新,引入了许多新特性。主要包括:
- 概念(Concepts Library):Concepts 提供了一种清晰、可读的方法来约束模板参数,从而提高了模板代码的可维护性。
- 范围(Ranges Library):引入了一组新的标准库组件,简化了对序列和范围的操作,使代码更加简洁和高效。
- 协程(Coroutines):引入了协程支持,允许在函数中暂停和恢复执行(对于异步编程和事件处理非常有用)。
- 模块(Modules):模块是一种新的组织代码的方式,用于替代传统的头文件引用和宏定义,为开发者提供 了更清晰的代码结构和更高的编译性能。
- 三路比较运算符(3-Way Comparison):引入了
<=>
运算符,使得比较操作更为一致和易于使用。 - 反射(Reflection):引入反射机制,但一些特性还不完全成熟。
std::is_constant_evaluated
函数和std::source_location
类型都为实现某种形式的反射提供了基础。 - 并发编程增强:引入了一些新的标准库组件,如
std::jthread
、std::stop_token
和std::latch
,可简化并发编程。 - 标准库新特性:标准库中引入了一些新的组件和改进,包括对
std::span
、std::format
、std::atomic
的扩展,以及对std::chrono
的增强。
其中,Concepts、Ranges、Modules、Coroutines 是 C++20 最主要的四大特性,开发者可以通过这些新特性提高代码的可读性、可维护性和性能,也更能适应现代软件开发的需求。