C++学习:Effective Modern C++条款

2021-06-11  本文已影响0人  khaos

条款1:理解模板类型推导

条款2:理解auto类型推导

条款3:理解decltype.

条款4:知道如何查看推导出来的类型.

条款5:优先使用auto,而不是显式的类型声明

条款6:当auto推导出的类型不是想要的类型时,使用显示类型初始化的惯用语法。

条款7:创建对象时区分()和{}。

条款8:优先使用nullptr,而不是0和NULL。

条款9:优先使用alias声明,而不是typedef。

条款10:优先使用范围枚举,而不是非范围枚举。

条款11:优先使用deleted函数,而不是私有未定义函数。

条款12:把重写函数声明为override

条款13:优先使用const_iterator, 而不是其它的iterator。

条款14:如果函数不抛出异常则声明为noexcept

条款15:只要有可能就使用constexpr。

条款16:使const成员成为线程安全的。

条款17:理解特殊成员函数的生成。

条款18:使用std::unique_ptr管理独占资源。

条款19: 使用std::shared_ptr管理共享资源。

条款20:使用std::weak_ptr代替可能会发生悬空指针的std::shared_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:使用init捕捉来移动对象到闭包。

条款33:使用decltype调用std::forward移动auto&&参数。

条款34:优先使用lambdas,而不是std::bind

条款35:优先采用基于task的编程方法,而不是基于thread(相关的类)。

条款36:如果需要异步处理,请指定std::launch::async。

条款37:使std::threads在任何路径下都是不能join的。

条款38:要小心不同的线程句柄析构行为。

条款39: 考虑对于一次性事件通信中使用void future。

条款40:使用std::atomic处理并发,使用volatile处理特殊内存。

条款41: 考虑使用传值来处理移动操作很廉价而且总是被拷贝的参数(如果移动没有提高性能的话,编译器可能就直接优化成拷贝了)

条款42:考虑使用emplace的函数,而不是insert函数

上一篇 下一篇

猜你喜欢

热点阅读