2017-02-13 4 views
0

私は最近、将来の使用のために事前に勉強していたサンプルコードを見てきました。以前に研究された。しかし、私は何とか複製するコードを生成することに失敗しました。for(auto &it : iostr)は何をしますか?誰かがこれが何をしているのか説明できますかコードブロック "for(auto&it:iostr)"を説明してください

+11

[範囲ベースforループ](http://en.cppreference.com/w/cpp/language/range-for)。 – songyuanyao

+0

@songyuanyao私は、この質問は重複していないように思っています。 –

答えて

4

これはC++ 11で導入されたrange-based forです。

iostrという表現では、begin(iostr)end(iostr)で指定されているように、iostrのすべての項目をループします。

あなたの例では、ループ変数としてauto &itを使用して、各項目に対してit(この名前はおそらく誤称です!)がその項目にバインドされ、ループボディがそのバインディングで実行されます。 ititemに改名する方が良いでしょう。またはch、またはそれが何であってもiostrが含まれます。

0

これは、iostrの要素をループします。(あなたが使用しての習慣に取得する必要があります)this excellent referenceパー

、この構築物は、現在とまったく同じです:

この場合
{ 
    auto && __range = iostr; 
    for (auto __begin = std::begin(__range), __end = std::end(__range); 
      __begin != __end; 
      ++__begin) { 
     auto& it = *__begin; 
     // (your loop body here) 
    } 
} 

あるいは、もっと単純に:

for (auto __begin = std::begin(iostr), __end = std::end(iostr); 
      __begin != __end; 
      ++__begin) { 
     auto& it = *__begin; 
    // (your loop body here) 
} 

ので、 C++ 17の場合、と__endがどのように宣言されているのかが若干変更されています(ただし、!=を使用して比較できる限り)。それはドキュメントに書かれています。

関連する問題