int x = 1; /* ASSUME THIS IS SO */
y = x = x + 1;
/* Results: */
y == 2;
x == 2;
Как он компилирует
То же, что:
x += 1;
y = x;
Почему это не undefined
Поскольку вы не пишете x в том же выражении, вы его читаете. Вы просто установите его себе + 1, затем присвойте y значению x.
Ваше будущее
Если вы обнаружите, что код запутан, вы можете использовать круглые скобки для чтения:
y = x = (x + 1);
Ответ 2
Нет, ваше выражение правильно определено. Вероятно, вы искали y = x = x++;, а это не так.
Ответ 3
Нет. Вы изменяете только x один раз, и из-за правильной ассоциативности = это присвоение происходит до назначения на y. Даже если это произошло, есть еще одна модификация x. Ваше выражение является законным как y = ++x.