Для отдельно стоящих i++ и ++i современный компилятор C/C++ сгенерирует идентичный код.
Разница возникает только при использовании этих операций внутри выражений:
++i работает как ((i += 1), i) - возвращает значение i после увеличения.
i++ работает как ((tmp = i), (i += 1), tmp) - возвращает значение, которое имела переменная i до увеличения.
Предпочтительности не существует - всё зависит от того, что именно надо сделать. В каких-то случаях удобнее использовать пре, в каких-то пост.
Например, классическое копирование C-style строки:
while (*q++ = *p++);
Главное - использовать изменяемую переменную в выражении только один раз - чтобы не нарваться на неопределённое поведение. Например, итоговое значение j в выражении:
j = i++ + i;
непредсказуемо и зависит от особенностей компилятора и даже от уровня оптимизации, установленного при компиляции.
P.S. В компьютерах PDP-11, для которых изначально и создавался язык C, операции *p++ и *--p могли выполняться в разы быстрее, чем *++p и *p--. Да и сами операции ++ и -- были введены для того, чтобы упростить генерацию машинного кода.
C/C++
Какая разница между преинкрементом и постинкрементом?? Где что предпочтительнее?
преинкремент увеличивает перед другими вычислениями, постинкремент - после. Что использовать - решайте по обстоятельствам.
первый пример
int a, x;
a =10; x = 20;
a = ++x;// сперва выполнится операция ++x, х станет равен 21. потом а станет равен 21
ИЛИ эту же запись можно записать более развернуто (если так понятнее)
x = x+1;//или x++;
a = x;
второй пример
int a, x;
a =10; x = 20;
a = x++;// сперва a=20; потом операция x++, х станет равен 211
развернуто
a = x;
x =x+1;
int a, x;
a =10; x = 20;
a = ++x;// сперва выполнится операция ++x, х станет равен 21. потом а станет равен 21
ИЛИ эту же запись можно записать более развернуто (если так понятнее)
x = x+1;//или x++;
a = x;
второй пример
int a, x;
a =10; x = 20;
a = x++;// сперва a=20; потом операция x++, х станет равен 211
развернуто
a = x;
x =x+1;
преинкремент возвращает ссылку, постинкремент возвращает значение
Похожие вопросы
- В чем разница принимаемых аргументов C++?
- При присвоении i++; или ++i; разница есть а вот есть ли разница при присвоении int &i; int& i; int* i; int *i;
- C++. Разница меджу #define и const ?
- В чем разница между C и C++?
- Вычислить модуль суммы всех отрицательных элементов, сумму всех положительных и разницу между значениями этих сумм
- Язык С++ : есть ли разница между этими двумя операциями? 1) int m = (int)n; 2) int m = int(n).
- Объсните пожалуйста значение скобок в int(*ptr)[10] и разницу с int(*ptr)[10]=new int[5][10]. (Подробности в описании)
- "Фибер, поток, корутина" в чем разница между ними?
- В чем разница между C++ xCode и C++ VisualStudio?
- В чем разница при переполнении целочисленных типов между беззнаковыми и знаковыми типами C++?