Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C、PHP、java中输出不同的_Java_Php_C - Fatal编程技术网

在C、PHP、java中输出不同的

在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以任何特定顺序更新(+=运算符不引入序列点)。因此,结果会因平台、构建等的不同而有所不同。虽然在实践中会是一样的,但运行时的结果甚至

我在一个声明上苦苦挣扎。当我在C和PHP中执行这个(类似)时,我得到的答案是5。但同样的代码在Java中生成4。有人能解释一下这种区别吗

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