В соответствии с приоритетом оператора , оператор запятой имеет более низкий приоритет, чем 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)