•1998年,C++的标准投入使用,这个版本的C++被认为是标准C++。在C++的时间表中,C++14标准按计划是一个小版本,完成制定C++11标准的剩余工作。
•C++11标准已经在2011年正式发布,C++14标准已经在2014年发布。
•新的语言特性留到了接下来的C++17标准中(本文暂不涉及)。
1、类型说明符auto
•和只对应一种特定类型的说明符(int、double等)不同,auto用于从初始化表达式中推断出变量的数据类型。因此,auto定义的变量必须有初始值。
2、类型说明符decltype
•decltype的作用是选择并返回操作数的数据类型。编译器会分析表达式并得到它的类型,但是不会去计算表达式的值。
•注意:如果decltype使用的是一个不加括号的变量,得到的就是该变量的类型。如果给变量加上了一层括号,编译器会把它当作一个表达式,得到的则是引用类型。
3、空指针nullptr
•nullptr是为了解决原来C++标准中NULL的二义性问题而引进的一种新的类型,因为NULL实际上代表的是0。
4、基于范围的for循环
•基于范围(range-based)的for循环:简化了常见的循环,对数组或容器类等的每个元素执行相同的操作(VS2010目前不支持)。
5、扩展的sizeof
•在C++98里,对非静态成员变量使用sizeof是不能够通过编译的,但在C++11里可以(VS2010目前不支持)。在C++11中,对非静态成员变量使用sizeof操作是合法的。而在C++98中,只有静态成员,或者对象的实例才能对其成员进行sizeof操作。
6、虚函数的override和final指示符
•override,表示函数应当重写基类中的虚函数(VS2010目前支持)。
•final,表示派生类不应当重写这个虚函数(VS2010目前不支持)。
7、限定作用域的枚举
•enum class,在枚举类型的作用域外是不可访问的。相反,不限定作用域的枚举类型中,枚举成员的作用域与枚举类型本身的作用域相同(VS2010目前不支持)。
8、constexpr变量
•将变量声明为constexpr类型以便由编译器来验证变量的值是否为一个常量表达式,必须在编译期间计算出它的值并且它的值不可以被改变(VS2010目前不支持) 。
•Const只能保证在运行时是常量,即具有运行时数据的不可更改性。
9、noexcept
•在C++11中,声明一个函数不可以抛出任何异常使用关键字noexcept(VS2010目前不支持) 。
•编译器不会在编译时检查noexcept的说明,如果一个函数在说明了noexcept的同时又含有throw语句,编译器将顺利编译通过,并不会因为这种违反异常说明的情况而报错。
10、匿名函数
•匿名函数,又称为Lambda函数(也叫Lambda表达式)。
•Lambda表达式具体形式如下:
•[capture](parameters)->return-type{body}