基本的自动样本

关键字 auto 提供变量类型的自动扣除。

处理长类型名称时特别方便:

std::map< std::string, std::shared_ptr< Widget > > table;
// C++98
std::map< std::string, std::shared_ptr< Widget > >::iterator i = table.find( "42" );
// C++11/14/17
auto j = table.find( "42" );

使用基于范围的 for 循环

vector<int> v = {0, 1, 2, 3, 4, 5};
for(auto n: v)
    std::cout << n << ' ';

lambdas

auto f = [](){ std::cout << "lambda\n"; };
f();        

避免重复类型:

auto w = std::make_shared< Widget >();

避免令人惊讶和不必要的副本:

auto myMap = std::map<int,float>();
myMap.emplace(1,3.14);

std::pair<int,float> const& firstPair2 = *myMap.begin();  // copy!
auto const& firstPair = *myMap.begin();  // no copy!

复制的原因是返回的类型实际上是 std::pair<const int,float>