Оценивается ли условие цикла в C ++ 11 для каждого цикла?

c++ performance for-loop c++11 foreach

2414 просмотра

1 ответ

65648 Репутация автора

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

Если memoryManager содержит 1000 элементов, вызывается ли memoryManager.getItems()1000 раз или только один в начале цикла?

Компилятор выполняет какую-либо оптимизацию с -O2 (или -O3)?

( memoryManager.getItems()возвращает std::vector<Entity*>&)

Автор: Vittorio Romeo Источник Размещён: 02.04.2013 01:56

Ответы (1)


53 плюса

221658 Репутация автора

Решение

Он оценивается только один раз. Стандарт определяет оператор на основе диапазона forкак эквивалент:

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

где range-initвыражение (заключенное в скобки) или фигурный список инициализации после:

Автор: Mike Seymour Размещён: 02.04.2013 01:59
Вопросы из категории :
32x32