浅谈C++11新特性

浅谈C++11新特性_第1张图片

•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目前不支持)。

浅谈C++11新特性_第2张图片

 

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目前不支持)。

浅谈C++11新特性_第3张图片

 

8、constexpr变量

•将变量声明为constexpr类型以便由编译器来验证变量的值是否为一个常量表达式,必须在编译期间计算出它的值并且它的值不可以被改变(VS2010目前不支持) 。

浅谈C++11新特性_第4张图片

•Const只能保证在运行时是常量,即具有运行时数据的不可更改性。

 

9、noexcept

•在C++11中,声明一个函数不可以抛出任何异常使用关键字noexcept(VS2010目前不支持) 。

•编译器不会在编译时检查noexcept的说明,如果一个函数在说明了noexcept的同时又含有throw语句,编译器将顺利编译通过,并不会因为这种违反异常说明的情况而报错。

浅谈C++11新特性_第5张图片

 

10、匿名函数

•匿名函数,又称为Lambda函数(也叫Lambda表达式)。

•Lambda表达式具体形式如下:

•[capture](parameters)->return-type{body}

浅谈C++11新特性_第6张图片

你可能感兴趣的:(C++)