基本的自動樣本
關鍵字 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>
!