xor运算符使用引用或指针交换两个变量的值

cir*_*mbo 0 c++ swap reference xor

我有两个整数变量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 ;
}
Run Code Online (Sandbox Code Playgroud)

但两种情况都没有显示正确的结果!

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

Kei*_*son 7

我有两个整数变量i和j,我想创建一个函数,它将这两个变量作为参数,并使用xor运算符交换它们的内容.

为什么?

正如您所知,您需要传递指向对象的指针或使用引用.

这个:

x^=y^=x^=y;
Run Code Online (Sandbox Code Playgroud)

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

如果两个对象都是同一个对象,则xor技巧会失败; 第一个xor将对象归零.

如果要交换两个对象,只需使用临时对象:

int temp = x;
x = y;
y = temp;
Run Code Online (Sandbox Code Playgroud)

它很简单,而且很有效.

  • 是的,尽管事物的值或参考事项与"x ^ = y ^ = x ^ = y"的事实没有任何关系. (2认同)