zhouqijie

C++11新特性



新类型

long longunsigned long long。支持64位或更宽的整型。
char16_tchar32_t。支持16位和32位字符表示。



统一的初始化

初始化列表{...}现在可用于所有内置类型和用户定义的类型。

C++11还提供了initialize_list模板类,可将其用作构造函数参数。



声明

  1. auto推断类型。
  2. decltype将变量的类型声明为表达式指定的类型。(decltype(expression) y即让y的类型与expression相同)
  3. auto func(...) -> <typename>;(新增一种函数声明语法:返回类型后置)
  4. using ... = ...(模板别名)(与typedef区别是可用于模板部分具体化)
  5. nullptr(空指针,与NULL或者0的区别是nullptr不能转换为整数,提供了更高的类型安全)



智能指针

C++11摒弃了auto_ptr,新增了unique_ptrshared_ptrweak_ptr类型。



异常规范的修改

C++11摒弃了异常规范。(异常规范用于指出函数可能引发哪些异常)
但是C++11增加了关键字noexcept,它指出函数不会引发异常。



作用域内枚举

传统的C++枚举的类型检查相当低级,枚举名的作用域为枚举定义属同一作用域。所以可能会和其他枚举冲突。
C++新增了一种枚举,用enum struct XXX或者enum class XXX定义。新的枚举要进行显式限定以免名称冲突。

CRE:类似C#的枚举,需要显式限定的。



关于类的修改

C++引入了关键字explicit,以禁止单参数构造函数导致的自动转换。
explicit Person(double);

C++11拓展了explicit的用法,使得可对转换函数做类似处理。
explicit operator double() const;



STL和模板的修改

for(auto x : xxx) { ... }

forward_list单链表,比双向链表更简单。
unordered_mapunordered_set….使用哈希表而非红黑树实现的关系映射表。

cbegincend()。新方法将元素视为const

begin()end()

C++11终止了export的用法,但仍然保留关键字export以供以后使用。

模板嵌套是两个>之间用空格分开防止与>>混淆。



右值引用和新的构造函数

(详见右值引用和移动语义)

C++11还新增了移动构造函数移动赋值运算符



新的类功能

显式声明构造函数的默认版本。
Someclass() = default
Someclass(const Someclass &) = default

禁止复制对象–禁止复制构造函数和复制赋值运算符。
Someclass(const Someclass &) = delete;
Someclass & operator=(const Someclass &) = delete

Someclass::Someclass() : Someclass(0, 0.1, "xxx") { /*...*/ }

C++可用using <XXX>::<YYY>让作用域XXX内的命名空间成员或者类成员暴露出来。
C++11将这种方法用于构造函数,使得子类继承基类所有构造函数。
当没有对应的子类构造函数定义时,会使用继承来的构造函数。

CRE:C#中可使用base()来调用基类构造函数。

override:指出覆盖一个虚函数,而不是隐藏。(用于检查和确保虚函数重写无误,因为如果特征标不匹配将隐藏而不是覆盖旧版本)
final:禁止覆盖虚函数。

CRE:在C#可以使用sealed来禁止再次重写。



Lambda表达式以及包装器/适配器

(详见函数指针、函数对象、Lambda表达式.md)



可变参数模板

(详见C++PrimerPlus)



C++11新增的其他功能

<atomic>原子操作库。
<thead>线程支持库。
<mutex>线程支持库。
<condition_varible>线程支持库。
<future>线程支持库。
。。。。

<chrono>提供了处理时间间隔的途径。
<tuple>提供广义的pair对象,存储任意个的类型不同的值。
<ratio>有理数库。
<regex>正则表达式库。
。。。。

  1. 放松了对POD(Plain Old Data)的要求。
  2. 允许共用体的成员有构造和析构函数。
  3. 解决了内存对齐问题。要控制对齐方式可使用说明符alignas。要获悉类型或对象的对齐要求可使用运算符alignof()

扩展整型。
字面量运算符。
调试工具assert。
元编程支持。

(END)