跳到主要内容

C++ 语言标准

C++ 语言的标准可以分为 C++98、C++03、C++11、C++14、C++17 和 C++20 这几个标准。后面的数字表示标准制定的年份,例如 C++98 是 1998 年的标准、C++03 是 2003 年的标准、C++11 是 2011 年的标准,以此类推。

时间标准名称制定组织事件
1998C++98ISO & IEC1998年 C++ 标准得到 ISO 和 ANSI 批准。以后每 5 年视实际需要更新一次。
2003C++03ISO & IEC2003年通过了 C++ 标准第二版。
2011C++11ISO & IEC2011年发布了 C++ 标准第三版 C++11,取代现行的 C++98 和 C++03。此次标准为 C++98 发布 13 年来第一次重大修正。
2014C++14ISO & IEC2014年发布了 C++ 标准第四版 C++14,是 C++11 的增量更新。
2017C++17ISO & IEC2017年发布了 C++ 标准第五版 C++17,是 C++14 的增量更新。
2020C++20ISO & IEC2020年发布了 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 是一次重大的更新,引入了许多新特性。主要包括:

  1. 概念(Concepts Library):Concepts 提供了一种清晰、可读的方法来约束模板参数,从而提高了模板代码的可维护性。
  2. 范围(Ranges Library):引入了一组新的标准库组件,简化了对序列和范围的操作,使代码更加简洁和高效。
  3. 协程(Coroutines):引入了协程支持,允许在函数中暂停和恢复执行(对于异步编程和事件处理非常有用)。
  4. 模块(Modules):模块是一种新的组织代码的方式,用于替代传统的头文件引用和宏定义,为开发者提供了更清晰的代码结构和更高的编译性能。
  5. 三路比较运算符(3-Way Comparison):引入了 <=> 运算符,使得比较操作更为一致和易于使用。
  6. 反射(Reflection):引入反射机制,但一些特性还不完全成熟。std::is_constant_evaluated 函数和 std::source_location 类型都为实现某种形式的反射提供了基础。
  7. 并发编程增强:引入了一些新的标准库组件,如 std::jthreadstd::stop_tokenstd::latch,可简化并发编程。
  8. 标准库新特性:标准库中引入了一些新的组件和改进,包括对 std::spanstd::formatstd::atomic 的扩展,以及对 std::chrono 的增强。

其中,Concepts、Ranges、Modules、Coroutines 是 C++20 最主要的四大特性,开发者可以通过这些新特性提高代码的可读性、可维护性和性能,也更能适应现代软件开发的需求。

相关链接