为什么在C ++中使用std :: swap()我不能交换地址?
例如,使用以下
int x = 1, y = 2;
std::swap(&x, &y);
我收到了编译错误:
错误:没有匹配函数来调用'swap(int *,int *)'
但如果我这样做:
int *px = &x, *py = &y;
std::swap(px, py);
工作正常。所以有一个swap(int *,int *)!
知道第一个版本有什么问题吗? 提前谢谢。
答案 0 :(得分:8)
std::swap
通过(左值)引用获取其参数。因此,你传递的必须是左值。此外,参数引用的类型必须是MoveConstructible和MoveAssignable(因此,并非所有左值都必须工作 - 例如,尝试交换两个字符串文字可能会失败)。