2012-11-27 70 views
6

我在一篇文章中發現如何使用迭代器從容器中刪除元素。雖然迭代:自動變量和它的類型

for(auto it = translationEvents.begin(); it != translationEvents.end();) 
    { 
     auto next = it; 
     ++next; // get the next element 
     it->second(this); // process (and maybe delete) the current element 
     it = next; // skip to the next element 
    } 

爲什麼不使用在auto next = it;類型auto

我使用VS10,而不是C++ 11!

+0

請參閱[C++ 11 type inference](http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference) – juanchopanza

+5

默認情況下VS10的C++ 11已開啓。所以,你確實使用C++ 11。 –

回答

12

auto在C++ 11中的含義與以前不同。在早期的標準中,auto是自動存儲持續時間的存儲說明符 - 一個對象在其範圍末尾被銷燬的典型存儲。在C++ 11中,auto關鍵字用於變量的類型推導。變量的類型是從用於初始化它的表達式中推導出來的,這與模板函數的參數類型可以推導出相同的方式很相似。

當輸入醜陋的長類型沒有任何好處時,這種類型的扣除是有用的。通常,這個類型在初始化程序中是顯而易見的。對於其類型可能取決於其模板的實例化的變量也很有用。

許多C++ 11功能在VC10中默認支持,而auto就是其中之一。

+0

是什麼?它支持在vC++ 2010?我不知道 –

+0

這是否意味着自動不再處理存儲時間,或僅僅是它增加了它的功能? – MrMesees

4

這是C++的新版本中的一個縮寫,它允許我們避免笨重的迭代器表示法,因爲編譯器能夠推斷出實際類型應該是什麼。

2

它被稱爲Type Inference,另請參閱this question瞭解詳情。 C++ 11中的新增功能,旨在簡化許多冗長且不必要的代碼,尤其是迭代器和函數綁定。

2

這叫做type inference。自動變量的類型由初始值設定項的類型推導出來。

例如,這減少了爲大型複雜模板類型輸入的數量。