在C、PHP、java中输出不同的
我在一个声明上苦苦挣扎。当我在C和PHP中执行这个(类似)时,我得到的答案是5。但同样的代码在Java中生成4。有人能解释一下这种区别吗在C、PHP、java中输出不同的,java,php,c,Java,Php,C,我在一个声明上苦苦挣扎。当我在C和PHP中执行这个(类似)时,我得到的答案是5。但同样的代码在Java中生成4。有人能解释一下这种区别吗 int x=1,y=1; x+=y+=x+=y; 我们关心执行后x的值。在C中,表达式x+=y+=x+=y的行为未定义;从字面上说,任何结果都是可能的。问题是,除了少数例外,C没有指定表达式求值或应用副作用的顺序;不能保证x或y以任何特定顺序更新(+=运算符不引入序列点)。因此,结果会因平台、构建等的不同而有所不同。虽然在实践中会是一样的,但运行时的结果甚至
int x=1,y=1;
x+=y+=x+=y;
我们关心执行后x的值。在C中,表达式
x+=y+=x+=y
的行为未定义;从字面上说,任何结果都是可能的。问题是,除了少数例外,C没有指定表达式求值或应用副作用的顺序;不能保证x
或y
以任何特定顺序更新(+=
运算符不引入序列点)。因此,结果会因平台、构建等的不同而有所不同。虽然在实践中会是一样的,但运行时的结果甚至不必相同
是的,表达式解析为x+=(y+=(x+=y))
,但这并不意味着在计算最右边的x+=y
后立即更新x
的值
以下是一系列可能的评估和副作用,可以解释结果:
t0 <- x + y // t0 == 2
t1 <- y + t0 // t1 == 3
y <- t1 // y == 3
x <- t0 // x == 2
x <- x + t1 // x == 5
t0在C中,表达式x+=y+=x+=y
的行为未定义;从字面上说,任何结果都是可能的。问题是,除了少数例外,C没有指定表达式求值或应用副作用的顺序;不能保证x
或y
以任何特定顺序更新(+=
运算符不引入序列点)。因此,结果会因平台、构建等的不同而有所不同。虽然在实践中会是一样的,但运行时的结果甚至不必相同
是的,表达式解析为x+=(y+=(x+=y))
,但这并不意味着在计算最右边的x+=y
后立即更新x
的值
以下是一系列可能的评估和副作用,可以解释结果:
t0 <- x + y // t0 == 2
t1 <- y + t0 // t1 == 3
y <- t1 // y == 3
x <- t0 // x == 2
x <- x + t1 // x == 5
t0任何东西在C中都是正确的,因为这会调用未定义的行为。PHP中的Parse error.off当然会,因为没有添加$sign。但我用输出5Anything在C中是正确的,因为它调用了PHP中未定义的behavior.Parse error。当然,它会,因为没有添加$sign。但我有这个运行与我的输出5