В соответствии с приоритетом оператора , оператор запятой имеет более низкий приоритет, чем operator=
, поэтому x = 2,3;
эквивалентен (x = 2),3;
. (Приоритет оператора определяет, как оператор будет привязан к своим аргументам, более жестко или менее жестко, чем другие операторы, в соответствии с их приоритетами.)
Обратите внимание, что выражение запятой (x = 2),3
здесь, а не 2,3
. x = 2
сначала оценивается (и его побочные эффекты завершаются), затем результат отбрасывается, затем 3
оценивается (фактически ничего не делает). Вот почему значение x
есть 2
. Обратите внимание, что 3
это результат всего выражения запятой (т.е. x = 2,3
), он не будет использоваться для присвоения x
. (Измените его на x = (2,3);
, x
будет назначено с 3
.)
Для получения return 2,3;
, выражение запятой 2,3
, 2
вычисляются затем его результат отбрасывается, а затем 3
вычисляется и возвращаются как результат всего выражения запятой, который возвращается в обратном заявлении позже.
Дополнительная информация о выражениях и утверждениях
Выражение - это последовательность операторов и их операндов, определяющая вычисление.
x = 2,3;
это выражение выражение , x = 2,3
это выражение здесь.
Выражение, за которым следует точка с запятой, является утверждением.
Синтаксис: attr(optional) expression(optional) ; (1)
return 2,3;
это оператор перехода ( оператор возврата ), 2,3
это выражение здесь.
Синтаксис: attr(optional) return expression(optional) ; (1)