C++ 语言标准

C++ 语言的标准可以分为 C98、C03、C11、C14 和 C17 这几个标准。后面的数字表示标准制定的年份,例如 C98 是 1998 年的标准、C03 是 2003 年的标准、C11 是 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 的增量更新。

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)等等。

Leave a Reply