• 1.摘要
  • 2.基本信息
  • 3.简介
  • 4.版本变更
  • 5.现状
  • 6.示例
  • 6.1.类型推导与auto关键字
  • 6.2.外部模板
  • 7.Visual Studio C++11语言功能支持表(总表)
  • 7.1.Visual Studio C++11语言功能支持表:并发能力
  • 8.Visual Studio C++11语言功能支持表:C99

c++11

C++11标准是ISO/IEC14882:2011-Informationtechnology--Programminglanguages--C++的简称 。C++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IECJTC1/SC22/WG21)于2011年8月12日公布 ,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于C++11标准的草案(仅编辑上的修正)。此次标准为C++98发布后13年来第一次重大修正。

基本信息

  • 中文名

    C++11

  • 外文名

    C++11

  • 标准版本

    C++标准第三版

  • 发布时间

    2011年8月12日

  • 出版时间

    2011年9月

  • 标准文件号

    ISO/IEC 14882:2011

简介

C++11标准为C++编程语言的第三个官方标准,正式名叫ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 。 在正式标准发布前,原名C++0x。它将取代C++标准第二版ISO/IEC 14882:2003 - Programming languages -- C++ 成为C++语言新标准。

C++11包含了核心语言的新机能,并且拓展C++标准程序库,并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)。C++ 标准委员会计划在2010年8月之前完成对最终委员会草案的投票,以及于2011年3月3召开的标准会议完成国际标准的最终草案。最终于2011年8月12日公布,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于现行标准的草案(编辑上的修正)。此次标准为13年第一次重大修正。

ISO将在2014年和2017年发布C++的后续版本 。

版本变更

1.对C++核心语言的扩充

2.核心语言运行期的强化(右值引用和 move 语义;泛化的常数表达式;对POD定义的修正)

3.核心语言建构期表现的加强(外部模板)

4.核心语言使用性的加强(初始化列表;统一的初始化;类型推导[auto关键字];以范围为基础的 for 循环;Lambda函数与表示法;另一种的函数语法;对象构建的改良;显式虚函数重载;空指针;强类型枚举;角括号;显式类型转换;模板的别名;无限制的unions)

5.核心语言能力的提升(变长参数模板;新的字符串字面值;用户自定义的字面值;多任务存储器模型;thread-local的存储期限;使用或禁用对象的默认函数;long long int 类型;静态assertion;允许sizeof运算符作用在类型的数据成员上,无需明确的对象;)

6.C++标准程序库的变更(标准库组件的升级;线程支持;多元组类型;散列表;正则表达式;通用智能指针;可扩展的随机数功能;包装引用;多态函数对象包装器;用于元编程的类型属性;用于计算函数对象返回类型的统一方法)

现状

每个标准的发布都需要一段时间的普及。包括技术图书,编译器支持。C++11标准发布后,美国已经更新了大部分著名C++图书,以支持最新的C++11标准,例如:《C++ Primer (Fifth Edition)》、《C++ Primer Plus (Sixth Edition)》、《The C++ Programming Language (4th Edition)》等等。这几本书都已经有了中文翻译版,分别名叫《C++ Primer 中文版(第五版)》、《C++ Primer Plus 中文版(第六版)》、《C++程序设计语言(第四版)》。各大主流编译器产商也逐步添加了对C++11语法的支持,例如VS2012、g++、clang等都在很大程度上支持C++11标准。图为迄今支持情况。

示例

类型推导与auto关键字

C++ 11 标准废除了旧的 C++ 98 标准中 auto 的意思(自动变量类型),改成了自动类型推导的意思。

在标准C/C++,使用变量必须明确的指出其类型(强类型)。然而随着模板类型的出现以及模版元编程的技巧,指定类型,特别是函数定义明确的指定返回类型,就不容易表示。在这样的情况下,将中间结果存储与变量是一件困难的事情,可能会需要知道特定的元编程程序库的内部情况。