for(auto& entity : memoryManager.getItems()) entity->update(mFrameTime);
如果memoryManager包含1000个项目,memoryManager.getItems()
会在循环开始时调用1000次还是只调用一次?
编译器是否使用-O2(或-O3)运行任何优化?
(memoryManager.getItems()
返回std::vector<Entity*>&
)
答案 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
是表达式(括号括起)或: