Java内联int swap.为什么这只适用于Java

HBP*_*HBP 4 c++ java puzzle swap inline

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

我的印象是,由于'|'左侧'a'的值,这总是有效的 将被存储在寄存器中,然后分配给'a'将否定对'b'的指定值的影响.

int a = 5;
int b = -13;
b = a | (0 & (a = b));
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 10

您正在修改变量并读取其值而没有插入序列点.

b =         a          + 0 *   (a = b);
//  reading a's value        modifying a
Run Code Online (Sandbox Code Playgroud)

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