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