繁体   English   中英

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

[英]why std::swap does not work with address operator?

为什么在无法交换地址的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 *)!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM