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++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 的意思(自动变数类型),改成了自动类型推导的意思。
#include<vector>int main(){ const std::vector<int>v(1); auto a = v[0];//a为int类型 decltype(v[0]) b = 0;//b为const int&类型,即std::vector<int>::operator[](size_type)const的返回类型 auto c = 0;//c为int类型 auto d = c;//d为int类型 decltype(c) e;//e为int类型,c实体的类型 decltype((c)) f = e;//f为int&类型,因为(c)是左值 decltype(0) g;//g为int类型,因为0是右值 return 0;}
for 语句将允许简单的範围叠代:第一部分定义被用来做範围叠代的变数,就像被声明在一般for循环的变数一样,其作用域仅只于循环的範围。而在":"之后的第二区块,代表将被叠代的範围。这样一来,就有了能够允许C-style数组被转换成範围概念的概念图。这可以是std::vector,或是其他符合範围概念的对象。
int my_array[5]={1, 2, 3, 4, 5};for(int& x : my_array){x *= 2;}
功能
VS2011
VS2013
g++ 4.7
Clang 3.1
auto关键字
Yes
Yes
Yes
Yes
decltype关键字
Yes
Yes
Yes
Yes
右值引用(Rvalue references)与移动语义(move semantics)
Yes
Yes
Yes
Yes
Lambda表达式
Yes
Yes
Yes
Yes
nullptr关键字
Yes
Yes
Yes
Yes
静态断言(static_assert)关键字
Yes
Yes
Yes
Yes
基于範围的循环(Range based for loop)语法
Yes
Yes
Yes
Yes
函式返回类型后置(Trailing return type in functions)语法
Yes
Yes
Yes
Yes
final关键字
Yes
Yes
Yes
Yes
override关键字
Yes
Yes
Yes
Yes
强类型枚举(Strongly typed enums)
Yes
Yes
Yes
Yes
前置枚举声明(Forward declared enums)
Yes
Yes
Yes
Yes
外部模板(extern templates)
Yes
Yes
Yes
Yes
模板右尖括弧嵌套(>> for nested templates)
Yes
Yes
Yes
Yes
Local and unnamed types as template arguments
Yes
Yes
Yes
Yes
变参宏(Variadic macros)
Yes
Yes
Yes
Yes
新内建类型(New built-in types)
Partial(部分)
?
Yes
Yes
Initializer_lists容器
No
?
Yes
Yes
显式类型转换运算符(explicit type conversion operators)
No
Yes
Yes
Yes
内联命名空间(Inline namespaces)
No
?
Yes
Yes
sizeof用在没实例时的非静态成员 (sizeof on non-static data members without an instance)
No
?
Yes
Yes
改变union成员限制(Changed restrictions on union members)
No
?
Yes
Yes
Raw string literals
No
Yes
Yes
Yes
User defined literals
No
?
Yes
Yes
Encoding support in literals
No
?
Yes
Yes
Arbitrary expressions in template deduction contexts
No
?
Yes
Yes
默认方法(Defaulted methods)
No
Yes(有条件支持)
Yes
Yes
删除方法(Deleted methods)
No
Yes(有条件支持)
Yes
Yes
非静态成员初始化(Non-static data member initializers)
No
?
Yes
Yes
变参模板(Variadic templates)
No
?
Yes
Yes
函式模板中的默认模板参数 (Default template arguments in function templates)