1.型别推导
1.1 ParamType是个指针或引用,但不是万能引用
1.2 ParamType是个万能引用
1.3 ParamType既非指针也非引用
1.4 数组实参
A.按值形参
B.按引用传递形参
1.5 函数实参
2. auto型别推导
3.decltype
4.掌握查看型别推导结果的方法
5.auto
6. 当auto推导的型别不符合要求时,使用带显示型别的初始化物习惯用法
7. 在创建对象时注意区分()和{}
8.优先选用nullptr,而非0或NULL
9. 优先选用别名声明,而非typedef
10.优先选用限定作用域的枚举类别,而非不限作用域的枚举型别
11.优先选用删除函数,而非 private未定义函数
12.为意在改写的函数添加override声明
13.优先选用const_iterator,而非iterator
14.只要函数不会发射异常,就为其加上noexcept声明
15.只要有可能使用constexpr,就使用它
16.保证const成员函数的线程安全性
17.理解特种成员函数的生成机制
18.使用std::unique_ptr管理具备专属所有权的资源
19.使用std::shared_ptr管理具备共享所有权的资源
20.对于类似std::shared_ptr但有可能空悬的指针使用std::weak_ptr
21.优先选用std::make_unique和std::make_shared,而非直接使用new
22.使用Pimpl习惯用法时,将特殊成员函数的定义放到实现文件中
23.理解std::move和std::forward
相关知识点:
24.区分万能引用和右值引用
25.针对右值引用实施std::move,针对万能引用实施std::forward
26.避免依万能引用型别进行重载
27.熟悉依万能引用型别进行重载的替代方案
标签分派
对接受万能引用的模板施加限制
28.理解引用折叠
29.假定移动操作不存在、成本高、未使用
30.熟悉完美转发的失败情形
31.避免默认捕获模式
32.使用初始化捕获将对象移入闭包
33.对auto&&型别的形参使用decltype,以std::forward之
34.优先选用lambda式了,而非std::bind
35.优先选用基于任务而非基于线程的程序设计
36.如果异步是必要的,则指定std::launch::async
37.使用std::thread型别对象在所有路径皆不可联结
38.对变化多端的线程句柄析构函数行为保持关注
39.考虑针对一次性事件通信使用以void为模板型别实参的期值
40. 对并发使用std::atomic,对特种内存使用volatile
41.针对可复制的形参,在移动成本低并且一定会被复制的前提下,考虑将其按值传递
42.考虑置入而非插入