9

投稿で、イテレータを使用してコンテナから要素を削除する方法を見つけました。反復中:

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タイプなしで使用されるのはなぜauto next = it;ですか?

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

4

4 に答える 4

17

autoC ++ 11では、以前とは異なる意味を持っています。以前の標準でautoは、自動ストレージ期間のストレージ指定子でした。オブジェクトがスコープの最後で破棄される場所にある一般的なストレージです。C ++ 11では、autoキーワードは変数の型推定に使用されます。変数の型は、それを初期化するために使用されている式から推定されます。これは、テンプレート関数の引数の型からテンプレートパラメータを推定できるのとほぼ同じ方法です。

この型の推定は、醜い長い型を入力してもメリットがない場合に役立ちます。多くの場合、タイプはイニシャライザーから明らかです。また、テンプレートのどのインスタンス化に表示されるかに依存するタイプの変数にも役立ちます。

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

于 2012-11-27T11:30:27.060 に答える
5

これは、C ++の新しいバージョンでは省略形であり、コンパイラーは実際の型が何であるかを推測できるため、不格好なイテレーター表記を回避できます。

于 2012-11-27T11:26:50.757 に答える
3

これは型推論と呼ばれます。詳細については、この質問も参照してください。C ++ 11の新機能であり、特にイテレータと関数バインディングの場合、多くの長くて不要なコードを単純化することを目的としています。

于 2012-11-27T11:28:37.613 に答える
3

これは型推論と呼ばれます。自動変数のタイプは、初期化子のタイプによって推測されます。

たとえば、これにより、大きくて複雑なテンプレートタイプの入力量が減ります。

于 2012-11-27T11:30:18.870 に答える