2012-11-27 8 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 
    } 

はなぜautoauto next = it;を入力せずに使用されていますか?

私はC++ 11ではなくVS10を使用しています!

+0

[C++ 11型推論](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キーワードが使用されています。変数の型は、それを初期化するために使用される式から推測されます。テンプレート関数の引数の型からテンプレートパラメータを導き出すのと同じ方法です。

このタイプの控除は、醜いロングタイプを入力すると効果がありません。しばしば、タイプはイニシャライザから明らかです。

VC10では、多くのC++ 11の機能がデフォルトでサポートされており、autoの1つがサポートされています。

+0

何ですか? vC++ 2010でサポートされていますか?私はそれを知らなかった –

+0

これは、自動はもはや記憶期間を処理しないことを意味するのか、それともそれが何を向上させるだけであるのでしょうか? – MrMesees

4

コンパイラは、実際の型が想定されているものを推測することができるので、わかりにくいイテレータの表記を避けることができる、新しいバージョンのC++を簡潔に示しています。

2

Type Inferenceといい、詳しくはthis questionも参照してください。 C++ 11の新機能であり、特にイテレータや関数バインディングのために、長くて不要なコードを単純化することを意図しています。

2

これはtype inferenceと呼ばれます。 auto変数の型は、初期化子の型によって導出されます。

などです。これにより、大きく複雑なテンプレートタイプの入力量が削減されます。

関連する問題