【发布时间】:2012-06-13 20:57:52
【问题描述】:
我有两个整数变量 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 函数不交换通过引用或指针传递参数的值?
【问题讨论】:
-
:你知道c++有std::swap吗?所以你不必做不明智的事情,比如异或交换。
-
Xor 交换在任何情况下都是不可取的,除非您正在实现特定于系统的库函数并且已经证明它在您的系统上更快。当
x别名y时,您还没有解决可怕的故障模式。 -
@cirronimbo:在
(在 C++03 中)或 (在 C++11 中)中没有 std::swap。 -
(1) 你只是在猜测它更快 (2) 你写的它可能会混淆一些旧的编译器并且它有别名错误和 (3) 它比仅仅写不太清楚
temp = y; y = x; x = temp。写下你的意思并让编译器优化,除非你证明这还不够好。