55
for(auto& entity : memoryManager.getItems()) entity->update(mFrameTime);

memoryManager に 1000 個のアイテムが含まれている場合、memoryManager.getItems()1000 回呼び出されますか、それともループの最初に 1 回だけ呼び出されますか?

コンパイラは -O2 (または -O3) で最適化を実行しますか?

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

4

1 に答える 1

53

一度だけ評価されます。標準では、範囲ベースのforステートメントを次のように定義しています。

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

whererange-initは、式 (括弧で囲まれている) または波括弧の初期化リストです。:

于 2013-04-02T13:59:45.213 に答える