Некоторые из этих ответов основаны на моем опыте, а не на каких-либо неопровержимых фактах, поэтому, пожалуйста, примите это с недоверием.
Причины i ++ в качестве значения по умолчанию l oop incrementor
Постфикс x ++ создает временное выражение, которое передается в выражении «вверх», а переменная x впоследствии увеличивается.
Префикс ++ x не создает временный объект, но увеличивает значение «x» и передает результат для выражения.
Производительность
Рассматривая два простых цикла, один с использованием i ++, а другой ++ i, давайте рассмотрим сгенерированную сборку
#include <stdio.h>
int main()
{
for (int i = 0; i < 5; i++) {
//
}
for (int j = 0; j < 5; ++j) {
//
}
return 0;
}
Создает следующую сборку, используя G CC:
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 0
.L3:
cmp DWORD PTR [rbp-4], 4
jg .L2
add DWORD PTR [rbp-4], 1
jmp .L3
.L2:
mov DWORD PTR [rbp-8], 0
.L5:
cmp DWORD PTR [rbp-8], 4
jg .L4
add DWORD PTR [rbp-8], 1
jmp .L5
.L4:
mov eax, 0
pop rbp
ret
.L3 соответствует первому l oop, а .L5 соответствует второму l oop. Компилятор оптимизирует любые различия в этом случае, в результате чего получается идентичный код, поэтому нет разницы в производительности.
Внешний вид
Глядя на следующие три цикла, какой из них вам наиболее эстетически нравится?
for (int i = 0; i < 5; i++) {
//
}
for (int i = 0; i < 5; ++i) {
//
}
for (int i = 0; i < 5; i+=1) {
//
}
Для меня i + = 1 прямо, а ++ мне просто кажется ... назад
Эргономика
- i ++ ) - Ваша рука уже находится в правильном положении для ввода) после ввода ++
- ++ i) - Требуется переход от верхнего ряда к Гомерову и обратно
История
Старые C программисты и нынешние C программисты, которые пишут код системного уровня, часто используют i ++ для написания очень компактного кода, такого как:
// print some char * s
while(*s)
putc(*s++);
// strcpy from src to dest
while (*dest++=*src++);
Из-за этого i ++ стал инкремент C, которого программисты достигают первыми, в конечном итоге становится своего рода стандартом в тех случаях, когда ++ i и i ++ имеют одинаковые функциональные возможности.