Я встретил набор слайдов для обсуждения rant на С++. Там были интересные интересные лакомые кусочки, но мне показался слайд 8. Его содержимое было приблизительно:
Сменяющиеся стили
Старый и разоренный:
for (int i = 0; i < n; i++)
Новая жара:
for (int i(0); i != n; ++i)
Я никогда не видел цикл for
, используя вторую форму раньше, поэтому требование о том, что это была "Новая жара", заинтересовала меня. Я могу понять некоторые причины:
- Прямая инициализация с использованием конструктора против инициализации копирования
-
!=
может быть быстрее в оборудовании, чем<
-
++i
не требует, чтобы компилятор сохранял старое значениеi
, что и было быi++
.
Я бы предположил, что это преждевременная оптимизация, поскольку современные оптимизирующие компиляторы будут скомпилировать эти два до тех же самых инструкций; во всяком случае, последнее хуже, потому что это не "нормальный" цикл for
. Использование !=
вместо <
также подозрительно для меня, потому что это делает цикл семантически отличным от исходной версии и может привести к некоторым редким, но интересным ошибкам.
Была ли какая-нибудь точка, в которой популярна была версия "Новая горячность" цикла for
? Есть ли причина использовать эту версию в наши дни (2016+), например. необычные типы переменных цикла?