C++11
C++11 能更好的用于系统开发和库开发,语法更加泛化和简单化,更加稳定和安全,功能强大,提高开发效率。
-
自定义类型也可以使用初始化列表,扩大了大括号的使用范围。
-
变量类型推导auto
-
decltype 推导表达式类型作为变量的定义类型
-
final修饰类表示不能被继承,修饰虚函数表示不能被重写
-
override检查是否重写父类的虚函数
-
默认成员函数控制 =default 显示缺省函数和 =delete 先出默认函数
-
右值引用,右值可以是数据表达式,如字面值常量、表达式返回值、函数返回值,给右值取别名,需要右值引用一个左值时用move。
-
完美转发,在函数模板中完全依照模板的参数类型,将参数传递给函数模板中调用的另外一个函数,不产生额外开销。
-
万能引用,模板中的&&不代表右值引用,而是万能引用,既能接收右值也能接收左值
-
新的类功能,新增移动构造和移动赋值重载。之前6个默认的功能是构造、析构、拷贝构造、拷贝赋值、取地址重载、const 取地址重载。
-
lamda表达式,[捕捉列表](参数列表)->返回类型{表达式}。
-
nullptr关键字,代替NULL,可隐式转换为任何类型指针和bool,比NULL减少二义性,防止错误。
-
基于范围的for循环for(auto n:nums){}
-
constexpr 编译期常量类型,在函数及表达式前加上constexpr,让编译器将其视为一个编译期常量。
-
模板别名,template using mapstring= std::map<T,char*>
-
追踪返回值类型,返回值类型由auto推导,->decltype() 成为追踪返回类型
template <Typename T1,Typename T2>
auto Sum(T2& t1,T2 &t2) ->decltype(t1+t2){
return t1+t2;
} -
强类型枚举,不会将枚举常量暴露在外层作用域。
enum class Option{none,one,all}
Option o=Option::all -
noexcept修饰符或操作符void except_fun()noexcept; noexcept(常量表达式)
-
static_assert关键字,提供一个编译时期的检查,如为真,什么也不做,如为假,打印特殊的错误信息,相比assert不易误用,无安全风险。