EffectiveModernCpp
latest
类型推断
auto
转向现代C++
智能指针
右值引用、移动语义和完美转发
lambda表达式
并发API
其他轻微调整
EffectiveModernCpp
Docs
»
Welcome to EffectiveModernCpp’s documentation!
Edit on GitHub
Welcome to EffectiveModernCpp’s documentation!
¶
Contents:
类型推断
模板类型推断机制
auto
decltype
查看推断类型的方法
auto
用auto替代显式类型声明
auto推断出非预期类型时,先强制转换出预期类型
转向现代C++
用nullptr替代0和NULL
用using别名声明替代typedef
用enum class替代enum
用=delete替代private作用域来禁用函数
用override标记被重写的虚函数
用std::cbegin和std::cend获取const_iterator
用noexcept标记不抛异常的函数
用constexpr表示编译期常量
用std::mutex或std::atomic保证const成员函数线程安全
特殊成员函数的隐式合成与抑制机制
智能指针
用std::unique_ptr管理所有权唯一的资源
用std::shared_ptr管理所有权可共享的资源
用std::weak_ptr观测std::shared_ptr的内部状态
用std::make_unique(std::make_shared)创建std::unique_ptr(std::shared_ptr)
用std::unique_ptr实现pimpl手法必须在.cpp文件中提供析构函数定义
右值引用、移动语义和完美转发
std::move和std::forward只是一种强制类型转换
转发引用与右值引用的区别
对右值引用使用std::move,对转发引用使用std::forward
避免重载使用转发引用的函数
重载转发引用的替代方案
引用折叠
移动不比拷贝快的情况
无法完美转发的类型
lambda表达式
捕获的潜在问题
用初始化捕获将对象移入闭包
用decltype获取
auto&&
参数类型以std::forward
用lambda替代std::bind
并发API
用std::async替代std::thread
用std::launch::async指定异步求值
RAII线程管理
std::future的析构行为
用std::promise和std::future之间的通信实现一次性通知
std::atomic提供原子操作,volatile禁止优化内存
其他轻微调整
对于可拷贝的形参,如果移动成本低且一定会被拷贝则考虑传值
用emplace操作替代insert操作