gpt4 book ai didi

Java 赋值运算符行为与 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:51 27 4
gpt4 key购买 nike

这是在我处理“破解编码面试”问题时发生的:

Write a function to swap a number in place (that is, without temporary variables)

我决定用 Java 编写我的解决方案(因为我计划在实习面试中使用 Java。)

我提出了一个我几乎确信是正确答案的解决方案(因为我是在一行中完成的):

    public static void main(String args[]) {
int a = 5;
int b = 7;
a = b - a + (b = a);
System.out.println("a: " + a + " b: " + b);
}

果然,这段代码执行了预期的结果。 a == 7b == 5

现在是有趣的部分。

此代码不会在 C++ 中运行,本书后面也没有此解决方案。

所以我的问题是:我的解决方案究竟为何有效?我假设 Java 做事的方式与其他语言不同?

最佳答案

查看Java Language Specification, section 15.7 (Evaluation Order) :

The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.

因此在 Java 中,求值顺序是明确定义的并且可以满足您的期望。

C++ 规范不提供这样的保证;事实上,它是未定义的行为,因此该程序实际上可以做任何事情。

引自cppreference ,注意算术运算符的操作数排序不存在排序规则:

If a side effect on a scalar object is unsequenced relative to a value computation using the value of the same scalar object, the behavior is undefined.

关于Java 赋值运算符行为与 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32623124/

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