48
for(auto& entity : memoryManager.getItems()) entity->update(mFrameTime);
Se memoryManager contiene 1000 voci, memoryManager.getItems()
viene chiamato 1000 volte o solo uno all'inizio del ciclo?Un ciclo basato su intervallo C++ 11 viene valutato ogni ciclo?
Il compilatore esegue un'ottimizzazione con -O2 (o -O3)?
(memoryManager.getItems()
restituisce un std::vector<Entity*>&
)
Quasi. Dove right of the ':' è un'espressione, 'range-init' è quell'espressione racchiusa tra parentesi. :) –
@LightnessRacesinOrbit: Infatti. E, nel caso che a qualcuno importi perché questo è importante, "questo garantisce che un operatore virgola di primo livello non possa essere reinterpretato come delimitatore tra init-dichiarators nella dichiarazione di __range'." –
mentre 'range-init' viene evocato una volta,' ++ __ begin' verrà valutato ogni ciclo in modo che se la struttura dei dati sottostante viene modificata, i valori che non erano nella struttura dati sottostante quando 'range-init' è stato valutato possono essere assegnato alla 'for-range-declaration', compreso il comportamento non definito risultante (ad es. itertori invalidati). Basta chiarire che "evaulato una volta" non equivale a tutti i valori generati in modo sicuro in quel momento. –