C ++ 11基于范围的for循环条件是否在每个周期被评估?
for(auto& entity : memoryManager.getItems()) entity->update(mFrameTime);
如果memoryManager包含1000个项目, memoryManager.getItems()
会被调用1000次,或者只有一个在循环的开始?
编译器是否使用-O2(或-O3)运行任何优化?
( memoryManager.getItems()
返回一个std::vector<Entity*>&
)
它只被评估一次。 该标准定义了一个基于范围的语句等同于:
{ auto && __range = range-init; for ( auto __begin = begin-expr, __end = end-expr; __begin != __end; ++__begin ) { for-range-declaration = *__begin; statement } }
其中range-init
是expression式(由圆括号包围)或braced-init-list之后: