#c
#c
Вопрос:
Существуют полные коды. И результат всегда будет «4 4 4».
#include <iostream>
int main() {
int a = 1;
int b = 2;
int x = (a = 3, b = a);
std::cout << a << ' ' << b << ' ' << x << std::endl;
return 0;
}
Комментарии:
1. Я бы объяснил это как код, который вы никогда не должны писать.
2. Операции имеют порядок, вы можете найти его в любом учебнике или руководстве. Следуя этому порядку, первая операция, выполняемая в
a = 3
, затемa
принимаетa
значение, равное 4, затемb
присваивается новому значениюa
(то есть 4), затемx
присваивается новому значениюb
, равному 43. Эта строка
int x = (a = 3, b = a);
эквивалентнаa = 3; b = a; int x = b;
so 4 4 4 вывод — это то, что вы ожидаете.4. Я думаю, вы думаете, что
a
это должно произойти в первую очередь. Это неверно,a = 3
происходит первым.
Ответ №1:
Выражение (a = 3, b = a)
вычисляется слева направо, а значение b = a
— это то, которое само по себе имеет значение b
. Это присваивается x
. Другими словами x
, будет таким же, как b
.
Кроме того, оператор разделителя выражений ,
является точкой последовательности, что означает, что a = 3
он завершается до вычисления b = a
.
a
следовательно, равно 4, и это присваивается b
, объясняя вывод.