c++ 11基于范围的for循环条件是否在每个循环中都被求值?

Does a C++11 range-based for loop condition get evaluated every cycle?

本文关键字:循环 是否 条件 于范围 范围 c++ for      更新时间:2023-10-16
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:

后面的表达式(用括号括起来)或带括号的init-list