我有两个整数变量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和j,我想打一个函数,它接受这两个变量作为它的参数和使用XOR运算符互换的内容。
为什么?
正如你已经想通了,你需要要么指针传递给对象,或者使用引用。
这个:
x^=y^=x^=y;
有未定义的行为,因为它改变了相同的对象两次序列点(它这样做两者之间x
和y
)。
如果两个对象是相同的对象中的异或特技失败; 第一XOR归零的对象。
如果你想交换两个对象,只需使用一个临时的:
int temp = x;
x = y;
y = temp;
很简单,和它的作品 。
正如其他人指出,这是一个非常愚蠢的优化(如果你可以称呼它)。 问题是链式使用就地运营商。 断成可分离语句,它的作品。
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