这两者之间有什么区别,比如一个更快还是更小?使用一个在另一个上的好处?
int a, b;
a ^= b ^= a ^= b;
Run Code Online (Sandbox Code Playgroud)
int a, b, temp;
temp = a;
a = b;
b = temp;
Run Code Online (Sandbox Code Playgroud)
(由于您正在读取未初始化的变量,因此两个片段的行为都是未定义的).
不要永远使用XOR交换.
您拥有它的方式(a^=b^=a^=b;)实际上是未定义的行为,因为您在排序点之间多次修改变量.编译器保留吃猫的权利.
相信编译器进行优化.
它仅适用于整数类型.
如果a并且b引用相同的对象,它将失败:如果您使用此方法来交换通过地址传递的对象,例如void xorSwap(int *x, int *y),正确的实现需要if块.
XOR swapping 目前尚不清楚:大多数人都不会理解你的代码在做什么,而且它被认为是神秘的.
自解释代码总是更好,所以除非存在巨大的性能问题并且基准测试证明xor方法更快,否则更喜欢使用第三个变量.