为什么在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*)!
知道第一个版本有什么问题吗?提前致谢.
std::swap通过(左值)引用获取其参数.因此,你传递的必须是左值.此外,参数引用的类型必须是MoveConstructible和MoveAssignable(因此并非所有左值都必须工作 - 例如,尝试交换两个字符串文字可能会失败).
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |