c++ - 使用引用或指针通过 xor 运算符交换两个变量的值

标签 c++ reference swap 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 ;
}

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

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

最佳答案

I have two integer variables i and j and I want to make a function which takes these two variables as its argument and interchanges their contents using xor operator.

为什么?

如您所知,您需要将指针传递给对象,或者使用引用。

这个:

x^=y^=x^=y;

具有未定义的行为,因为它在序列点之间修改同一个对象两次(它对 xy 都这样做)。

如果两个对象是同一个对象,异或技巧就会失败;第一个异或将对象归零。

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

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

它很简单,而且有效

关于c++ - 使用引用或指针通过 xor 运算符交换两个变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41798422/

相关文章:

C++ 随机数 0 - 16

c++ - 如何在 MFC 对话框的静态区域中绘制图像?

c++ - 在 C++ 中使用 a.vim

python - 在同一 Pandas 数据框中交换行

javascript - JavaScript 中的图像交换?

string - 是否有一种有效的算法来找到具有最差交换距离的给定字符串的排列?

c++ - 有没有办法为类的指针定义括号运算符?

c++ - 在 C++ 中延长临时值的生命周期

c++ - 在复制构造函数双向链表中没有得到头节点和尾节点的正确地址

python - 对在 python 中将列表项分配给 vars 感到困惑