Ответ 1
В соответствии с Приоритет оператора, оператор запятой более низкий приоритет, чем 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
оценивается и возвращается как результат всего выражения запятой, которое возвращается return statement позже.
Дополнительная информация о Expressions и Statements
Выражение представляет собой последовательность операторов и их операндов, которая задает вычисление.
x = 2,3;
выражение выражения, x = 2,3
- это выражение здесь.
Выражение, за которым следует точка с запятой, является выражением.
Синтаксис:
attr(optional) expression(optional) ; (1)
return 2,3;
инструкция перехода (return statement), 2,3
- это выражение здесь.
Синтаксис:
attr(optional) return expression(optional) ; (1)