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

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

如果memoryManager包含1000个项目, memoryManager.getItems()会被调用1000次,或者只有一个在循环的开始?

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

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

One Solution collect form web for “C ++ 11基于范围的for循环条件是否在每个周期被评估?”

它只被评估一次。 该标准定义了一个基于范围的语句等同于:

 { 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之后:

  • 生成所有可能的三字母string的最佳方法是什么?
  • 如何索引vector序列中的vector序列
  • Python:List vs Dict查找表
  • 目标C消息调度机制
  • 并行vs omp simd:什么时候使用每个?
  • 加快Java -Xms和-Xmx选项的权衡
  • 如何在运行时更改iPhone应用程序语言?
  • Android onClick与OnClickListener
  • 大O,你怎么计算/近似呢?
  • 你怎么能加快Eclipse?
  • res.end()和res.send()有什么区别?