是否每个周期都会评估基于C ++ 11范围的循环条件?

时间:2013-04-02 13:56:56

标签: c++ performance for-loop c++11 foreach

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

如果memoryManager包含1000个项目,memoryManager.getItems()会在循环开始时调用1000次还是只调用一次?

编译器是否使用-O2(或-O3)运行任何优化?

memoryManager.getItems()返回std::vector<Entity*>&

1 个答案:

答案 0 :(得分:52)

仅评估一次。该标准将基于范围的for语句定义为等同于:

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

其中range-init是表达式(括号括起)或:

之后的braced-init-list