Рассмотрим пример:
if (flag)
for (condition)
do_something();
else
for (condition)
do_something_else();
Если flag
не изменяется внутри циклов for
, это должно быть семантически эквивалентно:
for (condition)
if (flag)
do_something();
else
do_something_else();
Только в первом случае код может быть намного длиннее (например, если используется несколько циклов for
или если do_something()
является кодовым блоком, который в основном идентичен do_something_else()
), а во втором случае, флаг проверяется много раз.
Мне любопытно, смогут ли текущие компиляторы С++ (а главное g++) оптимизировать второй пример, чтобы избавиться от повторных тестов внутри цикла for
. Если да, то при каких условиях это возможно?