【翻译】提高你对C++11和C++14使用能力的42条准则

原文在此,如有版权问题请迅速联系我,我会立刻删除。

1.了解模板的类型推断机制。
2.了解auto的类型推断机制。
3.了解decltype
4.知道怎样查看推断出的类型。
5.在显式类型声明时优先使用auto
6.当auto无法推断出想要的类型时使用显式声明类型的初始化器。
7.在创建对象时区分(){}.
8.优先使用nullptr而不是NULL0.
9.优先使用别名声明而不是typedef
10.优先使用枚举类来代替原来的枚举类型。
11.在不需要一个成员函数时使用delete而不是将其定义为私有成员函数。
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_uniquestd::make_shared来代替new的直接使用。
22.在使用Pimpl方法时,将特殊的成员函数(Big five)的定义写在实现文件中。
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的future。
(Consider void futures for one-shot event communication.)
40.在并发时使用std::atomic,在特殊的内存使用情况下使用volatile
41.考虑对于可复制的参数使用值传递,它是容易被移动和复制的。
(Consider pass by value for copyable parameters that are cheap to move and always copied.)
42.考虑使用放置(emplacement)来代替插入(insertion)。

C++