Приоритет только определяет, какие операторы группируются с какими операндами во время синтаксического анализа.Он не контролирует порядок оценки.++
имеет более высокий приоритет, чем =
, только означает, что b = a++
анализируется как b = (a++)
, а не (b = a)++
.
Оператор ++
(одинарная и постфиксная формы) имеет результат и побочный эффект .В выражении b = a++
результат из a++
является текущим значением a
- это то, что присваивается b
. побочный эффект из a++
заключается в добавлении 1 к a
.
Порядок, в котором происходит присвоение b
и обновление до a
, является неопределенным .Наиболее простым является
b <- a
a <- a + 1
, но также допускается следующее:
tmp <- a
a <- a + 1
b <- tmp
Результатом ++a
является текущее значение a
плюс 1 и побочный эффектэто добавить 1 к a
. Не предполагайте , что в выражении, подобном b = ++a
, a
обновляется до b
.Опять же, порядок оценки может быть примерно таким:
b <- a + 1
a <- a + 1
Фактический порядок оценки зависит от вашего компилятора, настроек оптимизации и даже окружающего кода.
Единственные операторы, которые вызывают вычисление выражений слева направо, - это операторы &&
, ||
, ?:
и запятая.