《Effective Modern C++》主要讲述了C++11/14新特性的用法,阐述从两方面展开,一是原理解析,二是注意事项。如auto的原理使用的是模板推断机制,进而介绍模板的推断机制,再由此引出auto在使用上应该注意的问题。不同读者在这本书中可以各取所需,如果希望了解C++11/14的方方面面,则可以抽丝剥茧地深究原理,如果希望短时间内快速上手C++11/14工程实践,则只需略读原理但牢记结论,使用时绕开易产生问题的用法即可。此为个人笔记,条款非直译,而是个人理解的更贴近作者意图的表述。
- GitHub Pages:https://downdemo.github.io/Effective-Modern-Cpp/
- GitBook在线阅读:https://downdemo.gitbook.io/effective-modern-cpp/
- 07 创建对象时注意区分()和{}
- 08 用nullptr替代0和NULL
- 09 用using别名声明替代typedef
- 10 用enum class替代enum
- 11 用=delete替代private作用域来禁用函数
- 12 用override标记被重写的虚函数
- 13 用std::cbegin和std::cend获取const_iterator
- 14 用noexcept标记不抛异常的函数
- 15 用constexpr表示编译期常量
- 16 用std::mutex或std::atomic保证const成员函数线程安全
- 17 特殊成员函数的隐式合成与抑制机制
- 18 用std::unique_ptr管理所有权唯一的资源
- 19 用std::shared_ptr管理所有权可共享的资源
- 20 用std::weak_ptr观测std::shared_ptr的内部状态
- 21 用std::make_unique(std::make_shared)创建std::unique_ptr(std::shared_ptr)
- 22 用std::unique_ptr实现pimpl手法必须在.cpp文件中提供析构函数定义
- 23 std::move和std::forward只是一种强制类型转换
- 24 转发引用与右值引用的区别
- 25 对右值引用使用std::move,对转发引用使用std::forward
- 26 避免重载使用转发引用的函数
- 27 重载转发引用的替代方案
- 28 引用折叠
- 29 移动不比拷贝快的情况
- 30 无法完美转发的类型
- 31 捕获的潜在问题
- 32 用初始化捕获将对象移入闭包
- 33 用decltype获取auto&&参数类型以std::forward
- 34 用lambda替代std::bind
- 35 用std::async替代std::thread
- 36 用std::launch::async指定异步求值
- 37 RAII线程管理
- 38 std::future的析构行为
- 39 用std::promise和std::future之间的通信实现一次性通知
- 40 std::atomic提供原子操作,volatile禁止优化内存
- 41 对于可拷贝的形参,如果移动成本低且一定会被拷贝则考虑传值
- 42 用emplace操作替代insert操作