如果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
和{{1}}的相同值,但编译器会产生不同的答案。我可能会按优先顺序错过一些东西。
答案 0 :(得分:3)
两个表达式都会导致未定义的行为,尝试在没有插入序列点的情况下多次修改一个值。你的问题没有一般的答案。