Effective Modern C++ 笔记 - auto

从概念上来说,auto简单明了,但是它比看起来要微妙一些。

当然,使用它可以节省输入,也可以防止困扰手动类型声明的正确性和性能问题。

但从一个程序员的角度来看,auto的一些类型推断结果,虽然忠实地遵守了规定的算法,但却是错误的。在这种情况下,知道auto推导的结果是很重要的。

5. 尽量用auto代替显式声明

理由:

  1. auto声明的变量一定会被初始化。
  2. lambda代码可以用autostd::function来保存,用auto保存的开销更小, 同样道理, 尽量用Lambda代替std::bind

6. 用auto时小心类型转换问题

比如下面的代码

1
2
3
std::vector<bool> v{true, false, false, true};
bool a = v[0];
auto b = v[1]; // 注意这里b不是bool类型

vector<bool>通过代理对象来操控指定的位, 用auto时拿到的是代理对象本身而不是bool值.