Обычно тело цикла выглядит как-то так:
for (int i = 0; i < n; i++) { /* code */ }
Как новичок, вижу следующий плюс: проще читать/строить/изменять логику тела цикла. Но я для себя обнаружил следующий вариант:
for (int i = n; i--;) { /* code */ }
Где вместо условия мы пишем декремент. И как мне кажется, все плюсы пропадают, но при этом у нас нет условия, остается только шаг и не нужно вычислять булевое значение.
Я слабо знаком с Assembly и тем более теорией компиляторов. Поэтому мне кажется, что лучше использовать второй вариант. Справедливо ли это утверждение, если да, то на каких платформах?
Условие во втором варианте никуда не делось. Будет производится неявное приведение результата i-- к булевому типу путем сравнения с нулем: for (int i = n; 0 != (i--);). Лучше это или хуже - это будет сильно зависеть от содержимого цикла.
Продвижение своими сайтами как стратегия роста и независимости