为什么std :: swap不能与地址运算符一起使用?

use*_*954 1 c++ std

为什么在C++中使用std :: swap()我不能交换地址?
例如,具有以下内容

int x = 1, y = 2; 
std::swap(&x, &y);
Run Code Online (Sandbox Code Playgroud)

我收到编译错误:

错误:没有匹配函数来调用'swap(int*,int*)'

但如果我做以下事情:

int *px = &x, *py = &y;
std::swap(px, py);
Run Code Online (Sandbox Code Playgroud)

它工作正常.所以有一个swap(int*,int*)!

知道第一个版本有什么问题吗?提前致谢.

Jer*_*fin 8

std::swap通过(左值)引用获取其参数.因此,你传递的必须是左值.此外,参数引用的类型必须是MoveConstructible和MoveAssignable(因此并非所有左值都必须工作 - 例如,尝试交换两个字符串文字可能会失败).