effective modern c++(条款5-17)auto,转向现代c++
- 条款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--理解特种成员函数的生成机制
条款5–优先使用auto,而非显式型别声明
条款6–当auto推导的型别不符合要求时,使用带显示型别的初始化物习惯用法
隐形的代理型别会导致推导错误
可以用static_cast动态声明,引导auto
条款7–在创建对象时区分()和{}
条款8–优先使用nullptr,而非0或NULL
条款9–优先选用别名声明,而非typedef
typedef不支持模板
C++11型别转换工具<type_traits>:
std::remove_const::type,
std::remove_reference::type,
std::add_lvalue_reference::type
条款10–优先选用限定作用域的枚举型别,而非不限定作用域的枚举型别
即enum class要优于enum,
- 有底层型别int
- 总是可以前置声明
条款11–优先选用删除函数,而非private未定义函数
删除函数:
- 成员函数
- 非成员函数
- 特化模板
条款12–为意在改写的函数添加override声明
成员函数引用饰词
&
&&
修饰成员函数以适用左右值的实例
条款13–优先选用const_iterator,而非iterator
在最通用的代码中,优先选用非成员函数版本的begin(),end(),rbegin()等
条款14–只要函数不发射异常,就为其加上noexcept声明
noexcept比throw()(98版)和不加会得到更多的优化
条款15–只要有可能使用constexpr,就使用它
constexpr均具有const属性,
编译器计算
条款16–保证const成员的线程安全性
mutex
atomic单区域
条款17–理解特种成员函数的生成机制
要用就显式写出来不好吗