-- (decrement)
Оператор -- уменьшает переменную на 1: постфиксная форма x-- возвращает старое значение, префиксная --x — уже новое.
Полная статья
Описание
Оператор декремента -- уменьшает значение переменной на единицу. Он работает в двух формах, которые отличаются не результатом изменения переменной, а тем, какое значение возвращается в выражении: старое или уже новое.
Синтаксис
x--; // decrement x by one and returns the old value of x--x; // decrement x by one and returns the new value of x
Параметры
x: переменная целочисленного типа. Допустимые типы данных: int, long (в том числе беззнаковые варианты).
Возвращает
Префиксная форма (--x) возвращает новое значение переменной — то есть уже уменьшенное. Постфиксная форма (x--) возвращает старое значение — то, которое было до уменьшения. В обоих случаях сама переменная x в итоге уменьшается на 1.
Пример кода
x = 2;
y = --x; // x теперь содержит 1, y содержит 1
y = x--; // x содержит 0, но y всё ещё содержит 1
Где применяется
- Обратный отсчёт в цикле — например, перебор элементов массива с конца к началу.
- Управление счётчиком событий — уменьшение числа оставшихся попыток, жизней в игре или позиций в очереди.
- Работа с индексами — сдвиг позиции курсора или указателя на одну позицию назад.
Практические замечания
- Разница между
--xиx--важна только тогда, когда вы используете возвращаемое значение в выражении. Если декремент стоит отдельной строкой (x--;), обе формы дают одинаковый результат. - Будьте осторожны с беззнаковыми типами (
unsigned int,unsigned long): если переменная равна0и вы применяете--, она переполнится и станет максимальным значением для своего типа, а не отрицательным числом. - В сложных выражениях вроде
a = x-- + xпорядок вычисления может быть неочевидным. Лучше разбивать такие конструкции на отдельные строки — это делает код понятнее и предсказуемее. - Оператор
--работает только с переменными, но не с литералами и не с результатами выражений: запись вроде5--вызовет ошибку компиляции.