使用引用或指针通过XOR运算交换两个变量的值(Interchanging values of two

2019-06-25 09:45发布

我有两个整数变量i和j,我想打一个函数,它接受这两个变量作为它的参数和使用XOR运算符互换的内容。 现在,如果我做的函数采取按值即参数void swap (int x , int y); (带功能体相同功能swap下方),则值正被很好地在函数内交换。 但正如我所想的是变量的值在我所用引用传递参数的调用函数(和指针一样)的交换:

void swap ( int& x , int& y )
{
    x^=y^=x^=y;
    cout << x<< " " << y << endl ;
}

int main ()
{
    int i (1), j (2) ;
    swap ( i, j ) ;
    cout << i << " " << j << endl ;
}

但无论情况下表现出正确的结果!

为什么swap功能不是通过引用或指针传递参数交换的价值?

Answer 1:

我有两个整数变量i和j,我想打一个函数,它接受这两个变量作为它的参数和使用XOR运算符互换的内容。

为什么?

正如你已经想通了,你需要要么指针传递给对象,或者使用引用。

这个:

x^=y^=x^=y;

有未定义的行为,因为它改变了相同的对象两次序列点(它这样做两者之间xy )。

如果两个对象是相同的对象中的异或特技失败; 第一XOR归零的对象。

如果你想交换两个对象,只需使用一个临时的:

int temp = x;
x = y;
y = temp;

很简单,和它的作品



Answer 2:

正如其他人指出,这是一个非常愚蠢的优化(如果你可以称呼它)。 问题是链式使用就地运营商。 断成可分离语句,它的作品。

x^=y;  // values are X^Y, Y
y^=x;  // values are X^Y, X
x^=y;  // values are Y, X

和其他人一样,我会鼓励你,除非你有通过分析建立了一个明显的需要,并为您做一个显而易见的加速不是谜语这样清晰,杀聪明你的代码位摆弄黑客 。 (酷的网站)



文章来源: Interchanging values of two variables by xor operator using references or pointers