Java 内联 int 交换。为什么这只适用于 Java

标签 java c++ inline puzzle swap

我被要求在不使用临时变量或不使用 xor 的情况下编写交换,我想到了这个。
在 Java 中,这是可行的,但在 C/C++ 中,这是行不通的。

我的印象是这总是有效的,因为 '|' 左侧的 'a' 的值将存储在一个寄存器中,然后对“a”的赋值将抵消对“b”的赋值的影响。

int a = 5;
int b = -13;
b = a | (0 & (a = b));

最佳答案

您正在修改一个变量并在没有插入序列点的情况下读取它的值。

b =         a          + 0 *   (a = b);
//  reading a's value        modifying a

这是未定义的行为。您无权对代码的作用抱有任何期望。

关于Java 内联 int 交换。为什么这只适用于 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11122381/

相关文章:

java - 在 Android CallLogCalls 中使用 PHONE_ACCOUNT_ID 识别 SIM 卡插槽

java - 理解 GroupLayout 的困难

c++ - 我可以 std::unique 一个 std::priority_queue

c++ - 使用 Microchip XC16 编译器将 foo.cpp 构建为 C 代码

c++ - boost 从 binary_archive 到 polymorphic_archive 的序列化切换

java - Java WebApp 的 Azure GIT 持续部署

java - 导入的包编译后是否包含在.class文件中?

f# - F# 中的函数模板

c++ - 内联函数是否使对编译后的二进制文件进行逆向工程变得更加困难?

ruby-on-rails - 如何在线显示验证错误而不是在页面顶部