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

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

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

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

最佳答案

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

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

其中range-init:之后的表达式(用括号括起来)或括号初始列表

关于c++ - 是否在每个周期评估基于C++ 11范围的for循环条件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15766020/

10-11 19:59
查看更多