2013-04-02 18 views

答えて

47

memoryManager.getItems()std::vector<Entity*>&を返します)。

range-init
{ 
    auto && __range = range-init; 
    for (auto __begin = begin-expr, __end = end-expr; __begin != __end; ++__begin) { 
     for-range-declaration = *__begin; 
     statement 
    } 
} 

がほとんど:

+1

後(括弧で囲まれた)発現又はブレース-INIT-リストである:に相当するような標準は、範囲ベースforステートメントを定義します。 ':'の右が式である場合、 'range-init'はその式を括弧で囲んだものです。 :) –

+3

@ LightnessRacesinOrbit:確かに。なぜ誰かがそのようなことを気にしている場合には、 "これは、トップレベルのコンマ演算子がinit-declarator間の区切り文字として '__range'宣言で再解釈されないことを保証します。 –

+1

'range-init'が一度エバリュエートされている間に' ++ __ begin'が各ループに評価されるので、根底にあるデータ構造が変更された場合、 'range-init'がエバリュエートされたとき、結果としての未定義の挙動(例えば、無効化されたイテレータ)を含む、「for-range-declaration」に割り当てられる。 "evaulated once"がその時点で安全に生成されているすべての値と同じではないことを明確にするだけです。 –

関連する問題