ultima gnuc compiler compilador c++ performance for-loop c++11 foreach

c++ - compiler - gnuc



¿Se evalúa una condición de ciclo basada en el rango de C++ 11 en cada ciclo? (1)

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

Si memoryManager contiene 1000 elementos, ¿se memoryManager.getItems() 1000 veces o solo uno al comienzo del ciclo?

¿El compilador ejecuta alguna optimización con -O2 (o -O3)?

( memoryManager.getItems() devuelve un std::vector<Entity*>& )


Solo se evalúa una vez. El estándar define una declaración for basada for rango como equivalente a:

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

donde range-init es la expresión (rodeada de paréntesis) o braced-init-list después de :