gpt4 book ai didi

java - C++ 和 Java 的表达式求值顺序有何不同?

转载 作者:可可西里 更新时间:2023-11-01 16:28:50 25 4
gpt4 key购买 nike

由于试图理解此页面上的示例,我的大脑变得皱巴巴的: http://answers.yahoo.com/question/index?qid=20091103170907AAxXYG9

更具体地说,这段代码:

int j = 4;
cout << j++ << j << ++j << endl;

给出输出:566

现在,如果表达式从右到左求值,这对我来说很有意义,但是在 Java 中有类似的表达式:

int j = 4;
System.out.print("" + (j++) + (j) + (++j));

输出:456

这更直观,因为这表明它是从左到右计算的。在各个站点上对此进行研究,似乎使用 C++ 时编译器之间的行为有所不同,但我仍然不相信我理解。 Java 和 C++ 之间的这种评估差异的解释是什么?谢谢。

最佳答案

当操作有副作用时,C++ 依赖于 sequence points决定副作用(例如增量、组合分配等)何时生效的规则。逻辑 and-then/or-else ( &&|| )运算符,三元 ?问号运算符和逗号创建序列点; + , - , <<等等。

相比之下,Java 在进行进一步评估之前完成副作用。

当您在没有序列点的情况下多次使用具有副作用的表达式时,所产生的行为在 C++ 中是未定义的。任何结果都是可能的,包括没有逻辑意义的结果。

关于java - C++ 和 Java 的表达式求值顺序有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com