18.1 复习前面介绍过的C++11功能
新类型:
long long、unsigned long long、char16_t、char32_t、原始字符串(所见即所得,字符串前加R前缀,字符串首尾加上小括号R"(string)")
统一的初始化:
初始化列表语法可防止缩窄,即禁止将数值赋给无法存储它的数值变量,禁止将值存储到比它“窄”的变量中,但是允许转换为更宽的类型。另外,只要值在较窄类型的取值范围内,将其转换为较窄的类型也是允许的(数值需要在取值范围内)
**std::initialiizer_list:**可将其作为构造函数的参数
如果有类接受initializer_list作为参数的构造函数,则初始化列表语法就只能用于该构造函数.
声明:
auto:自动类型推断
decltype:将变量的类型声明为表达式指定的类型
返回类型后置:在函数名和参数列表后面指定返回类型
模版别名:using=:
(类似于typedef)
nullptr:表示空指针,它是指针类型,不能转换为整型类型。
**智能指针:**在程序中使用new从堆分配内存,等到不再需要时,自动将其释放
异常规范方面的修改:
**作用域内枚举:**可以创建枚举量作用域为类或者结构的枚举
对类的修改:
显式转换运算符:
explicit禁止单参数构造函数导致的自动转换,C++11拓展了explicit这种用法,使得可对转换函数做类似的处理
类内成员初始化:可以在类定义中初始化成员
模版和STL方面的修改:
基于范围的for循环:
新的STL容器:
新的STL方法:
valarray升级:
摒弃export
尖括号:不需要使用空格将尖括号分开(>>,> >)
右值引用:&&
右值引用可关联到右值,即可出现赋值表达式右边,但不能对其应用地址运算符的值。左值相当于地址值,右值相当于数据值。右值指的是引用了一个存储在某个内存地址里的数据。
https://tonglin.blog.csdn.net/article/details/91479048?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-91479048-blog-70173146.t5_refersearch_landing&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-91479048-blog-70173146.t5_refersearch_landing&utm_relevant_index=1
18.2 移动语义和右值引用
**移动语义:**保留原始数据位置,只是将原始数据转移到另一个变量中,简单来说解决的是各种情形下对象的资源所有权转移的问题。
右值引用让编译器使用移动构造函数来初始化对象。使用左值对象初始化对象时,将使用复制构造函数,而使用右值对象初始化对象时,将使用移动构造函数。
18.3 新的类功能
特殊的成员函数:
移动构造函数、移动赋值运算符(就是将左值引用改为右值引用&&)
可以使用default显式声明构造函数的默认版本,使用delete禁止编译器使用特定方法。
委托构造函数:
构造函数暂时将创建对象的工作委托委托给另一个构造函数
(使用另一个构造函数的代码,剩下的再补充)
继承构造函数:
使用using声明使得派生类继承基类的所有构造函数(默认构造函数、复制构造函数和移动构造函数除外),但不会使用与派生类构造函数的特征标匹配的构造函数。
管理虚方法:override和final:
在C++11中,可使用虚说明符oberride指出要覆盖的一个虚函数,将其放在参数列表后面。如果声明与基类方法不匹配,编译器将视为错误。说明符final可以禁止派生类覆盖特定虚方法。
18.4 Lambda函数
(没有返回类型和函数名)
18.5 包装器
包装器可以将可调用对象统一包装成一个类型。function就是一个包装器,也可称为适配器。(固定输入参数类型,使其只实例化一次)
18.6 可变参数模版
可接受可变数量的参数
模版和函数参数包:
(模版参数包Args中包含多个参数类型,函数参数包args中包含与Args匹配的值)
展开参数包:
将省略号放在函数参数包的右边,将参数包展开
将函数参数包展开,对列表中的第一项进行处理,再将余下内容传递给递归调用,以此类推,直到列表清空
C++11 新增的其他功能
并行编程:C++定义了一个支持线程化执行的内存模型,添加了关键字thread_local,提供了相关的库支持。
新增的库:random/chrono/tuple/ratio/regex
低级编程:放松了POD的要求;允许共用体的成员有构造函数和析构函数;解决了内存对齐问题;constexpr机制