0

Оценивается ли условие в цикле `for` диапазона C++11 на каждой итерации?

1

Проблема с вызовом метода в цикле

В коде у меня есть следующий фрагмент:

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

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

Также меня интересует, применяет ли компилятор какие-либо оптимизации при использовании флагов -O2 или -O3?

Для справки, memoryManager.getItems() возвращает std::vector<Entity*>&.

1 ответ(ов)

0

В соответствии со стандартом, оператор for с диапазоном оценивается только один раз. Он определяется как эквивалентный следующему коду:

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

Где range-init — это выражение (вместе с окружением в круглых скобках) или инициализатор с фигурными скобками, находящийся после двоеточия.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь