++a
и a++
- это просто разные операторы, несмотря на один и тот же символ ++
. Один из них - префиксный прирост, другой - постфиксный прирост. Это не имеет ничего общего с приоритетом по сравнению с назначением. (точно так же, как a - b
и -a
являются разными операторами, несмотря на один и тот же символ -
.)
РЕДАКТИРОВАТЬ: Было отмечено, что это примерно C, а не C ++ ... упс Таким образом, следующее объяснение может сбить с толку, если вы знаете только C; все, что вам нужно знать, это то, что int&
является ссылкой на int
, так что это похоже на указатель, но без необходимости разыменовывать его, поэтому изменение a
внутри этих функций фактически изменяет переменную, которую вы передали в функции.
Вы можете представить их как функции:
int prefixIncrement(int& a) {
return ++a;
}
... - это то же самое, что:
int prefixIncrement(int& a) {
a += 1;
return a;
}
И:
int postfixIncrement(int& a) {
return a++;
}
... совпадает с:
int postfixIncrement(int& a) {
int old = a;
a += 1;
return old;
}
Для придирки: Да, на самом деле нам нужно переместить семантику на возвращаемое значение для postfixIncrement
.