53 votes

La condition d'une boucle foreach C++11 est-elle évaluée à chaque cycle ?

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

Si memoryManager contient 1000 éléments, est-ce que memoryManager.getItems() est appelé 1000 fois ou seulement une fois au début de la boucle ?

Le compilateur exécute-t-il une optimisation avec -O2 (ou -O3) ?

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

53voto

Mike Seymour Points 130519

Il n'est évalué qu'une seule fois. La norme définit un for comme équivalent à :

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

donde range-init est l'expression (entourée de parenthèses) ou la liste d'initialisation entre crochets après l'élément :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X