1. pack 函数参数:多种数据类型,多个参数
2. nullptr 给空指针赋值
3. 一致性初始化 全部使用 大括号 {}(见到大括号就见到了 initializer list ), initializer_list<>,本质是一个 array(当array的大小为0的时候,会做成 1,最小为1)
4. auto for C++11中最简单最好用的东西。
5.explicit 几乎只用在 构造函数 (简写为 ctor)中
4,5一起的例子: for (const & a : vector_element) ,如果a的类型和vector_element中的类型不一致,并且a的类型使用了explicit,
那么将会转换失败。
6.=default = delete
构造函数 有了之后,可以再加一个default, Foo f(1) , Foo f都可以,如果不加default,就没有默认的了
拷贝构造函数 有了之后 =default = delete 都不可以
赋值拷贝函数 有了之后 =default = delete 都不可以
一般函数 =default 不可以 = delete 可以 一般很少这么用
析构函数 =default = delete 二选一
引申出来的重要话题:
什么时候用编译器默认的 big three(构造,拷贝构造,赋值构造,析构) =default ,自己不用再写呢?
类中没有 指针 的时候。
如果有指针,大概率是需要自己写big three,因为涉及到深浅拷贝
7. using
1)更加清楚的定义 函数指针 using FUN_ = void(*)(int, int);
2)type alias, alias template
https://blog.csdn.net/zzyczzyc/article/details/94290574
8.noexcept
保证函数不抛出异常
void fun() noexcept(true) 无条件不抛异常
void fun() noexcept(xxx) 在xxx条件下不抛异常
9. overwrite 明确表示该函数是用来重定义的,如果写的时候,由于疏忽,写错了,入参的类型/数量,导致找不到相对应的父类函数,则报错--->感觉是帮助我们发现错误用的。
10.final 针对类/函数,
类:不可以继承了
函数:不可以重写了
11.decltype
获取自己比较难推出的数据类型
比如 iterrator,lambda
12.move
本质是指针的操作,一般应用在 临时object或者确定后续不再用的object
将旧指针断掉,新的object指针指向object地址。
旧的就不可以再用了。
13.