输出不同的C,PHP,java

时间:2016-06-24 15:35:44

标签: java php c

我在一个声明中苦苦挣扎。当我在C和PHP中执行此(类似)时,我的回答为5.但是相同的代码在Java中产生4。有人可以解释这种差异。

int x=1,y=1;
x+=y+=x+=y;

我们担心执行后x的值。

1 个答案:

答案 0 :(得分:2)

在C中,表达式x+=y+=x+=y的行为是未定义;字面上任何结果都是可能的。问题是,除少数例外情况外,C没有指定评估表达式或应用副作用的顺序;我无法保证xy按任何特定顺序更新(+=运算符不会引入序列点)。因此,结果将在平台,构建等之间变化。从运行到运行甚至不必相同,尽管在实践中它将是。

是的,表达式解析x+=(y+=(x+=y)),但这并不意味着x的价值立即更新 评估最右边的x+=y

这里有一个可能的评估和副作用序列,可以解释输出:

t0 <- x + y  // t0 == 2
t1 <- y + t0 // t1 == 3
 y <- t1     //  y == 3
 x <- t0     //  x == 2
 x <- x + t1 //  x == 5

与C不同,Java强制执行特定的评估顺序和副作用(从左到右评估所有内容,立即应用副作用),因此结果在Java中定义良好。

不是关于PHP的线索。