Если int x=5;
я полагаю, что выражение y=++x * ++x;
оцениваются как:Унарного ++ порядок старшинства
Сначала выполните ++x
x=6
вызывают, а затем снова ++x
вызывая x=7
выражение затем оценивает y=x*x
делает значение y=49
Используя тот же рассуждение о следующие строки кода
int z=5, x=5,y=0,p=0;
y=++x * ++x + ++x;
p= ++z + ++z * ++z;
должны оцениваться одинаковые значения y
и p
, но компилятор производит разные ответы. Вероятно, я кое-что упустил в порядке очередности.
Вы должны ** никогда не кодировать '++ x * ++ x' **, потому что это ** undefined bhavior **, и реализации разрешено что-либо делать (включая взлом компьютера или даже то, что вы наивно ожидая) –