Оценивается ли условие цикла в C ++ 11 для каждого цикла?
2414 просмотра
1 ответ
for(auto& entity : memoryManager.getItems()) entity->update(mFrameTime);
Если memoryManager содержит 1000 элементов, вызывается ли memoryManager.getItems()
1000 раз или только один в начале цикла?
Компилятор выполняет какую-либо оптимизацию с -O2 (или -O3)?
( memoryManager.getItems()
возвращает std::vector<Entity*>&
)
Ответы (1)
53 плюса
Решение
Он оценивается только один раз. Стандарт определяет оператор на основе диапазона for
как эквивалент:
{
auto && __range = range-init;
for ( auto __begin = begin-expr, __end = end-expr; __begin != __end; ++__begin ) {
for-range-declaration = *__begin;
statement
}
}
где range-init
выражение (заключенное в скобки) или фигурный список инициализации после:
Вопросы из категории :
- c++ What are the barriers to understanding pointers and what can be done to overcome them?
- c++ Какой самый простой способ для анализа файла INI в C ++?
- c++ Когда вы должны использовать «друг» в C ++?
- c++ Как вы очищаете переменную stringstream?
- performance Как создать новый экземпляр объекта из Типа
- performance Как работает индексация базы данных?
- performance Действительно ли опечатанные классы действительно предлагают преимущества?
- performance Big O, как вы рассчитываете / приближаете это?
- for-loop В чем разница между ++ i и i ++?
- for-loop Можно ли выполнять параллельные обходы в MATLAB так же, как в Python?
- for-loop Haxe итерация на динамическом
- for-loop Переберите все файлы в каталоге, используя цикл for
- c++11 Можно ли напечатать тип переменной в стандартном C ++?
- c++11 Проверьте, имеет ли класс функцию-член с заданной сигнатурой
- c++11 Что такое умный указатель и когда я должен его использовать?
- c++11 Как вы можете перебирать элементы std :: tuple?
- foreach Как вы получаете индекс текущей итерации цикла foreach?
- foreach Как работает Java для каждого цикла?
- foreach LINQ эквивалент foreach для IEnumerable <T>
- foreach Update all objects in a collection using LINQ