Что касается for (), зачем использовать i ++, а не ++ i?

Возможно, это не имеет значения для компилятора после того, как он оптимизирует, но в C / C ++ Я вижу, что большинство людей создают цикл for в виде:

for (i = 0; i < arr.length; i++)

, где увеличение выполняется с помощью post fix ++. Я понимаю разницу между двумя формами. i ++ возвращает текущее значение i, но затем незаметно добавляет 1 к i. ++ i сначала добавляет 1 к i и возвращает новое значение (на 1 больше, чем было).

Я думаю, что i ++ требует немного больше работы, так как предыдущее значение необходимо сохранить в дополнение к следующему значение: нажмите * (& i) в стек (или загрузите в регистр); приращение * (& i). По сравнению с ++ i: приращение * (& i); затем используйте * (& i) по мере необходимости.

(Я понимаю, что операция "Increment * (& i)" может включать загрузку регистра, в зависимости от конструкции процессора. В этом случае i ++ потребуется либо другой регистр, либо добавление стека .)

Да и вообще, в какой момент и почему i ++ стал более модным?


Я склонен верить ажеглову: Это педагогический метод, и, поскольку большинство из нас использует C / C ++ в системе Window или * nix, где компиляторы имеют высокое качество, никто не пострадает.

Если вы используете компилятор низкого качества или интерпретируемую среду, вам, возможно, придется учитывать это. Конечно, если вы занимаетесь продвинутым C ++, драйвером устройства или встроенным ПО, надеюсь, вы достаточно опытны, чтобы это не было большой проблемой. (Есть ли у собак природа Будды? Кому действительно нужно знать?)

10
задан Rich K 6 October 2010 в 19:41
поделиться