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 :