简单的。当您不在乎类型是什么时使用它。例如
for (const auto & i : some_container) {
...
我在这里关心i的是容器中的任何内容。
这有点像 typedef。
typedef float Height;
typedef double Weight;
//....
Height h;
Weight w;
在这里,我不在乎handw是浮点数还是双精度数,只关心它们是适合表达 heights 和 weights 的任何类型。
或者考虑
for (auto i = some_container .begin (); ...
这里我关心的是它是一个合适的迭代器,支持operator++(),在这方面有点像鸭子打字。
此外,无法拼写 lambdas 的类型,所以auto f = []...是好的风格。另一种方法是强制转换,std::function但这会带来开销。
我真的无法想象auto. 我能想象的最接近的是剥夺自己对某种重要类型的显式转换——但你不会使用auto它,你会构造一个所需类型的对象。
如果您可以在不引入副作用的情况下删除代码中的一些冗余,那么这样做一定很好。
反例(借用别人的答案):
auto i = SomeClass();
for (auto x = make_unsigned (y); ...)
在这里我们确实关心类型是什么,所以我们应该写Someclass i;和for(unsigned x = y;...