在Effective Modern C++中,它说
仅为缺少显式声明的移动操作,复制操作和析构函数的类生成移动操作.
但是我用Gcc和Clang测试了它,没有错误被抛出.那条规则已经过时了吗?
示例程序:
#include <iostream>
#include <string>
#include <vector>
#include <memory>
class A
{
int i;
public:
~A() = default;
};
int main()
{
A a, b;
a = b;
A c(a);
A d(std::move(a));
b = std::move(d);
}
Run Code Online (Sandbox Code Playgroud)
编辑:从书中复制"移动操作",这可能会导致混淆.将其更改为移动构造函数并移动赋值.
std::move只是一个演员A&&.它创建的非常相同的xvalue将愉快地绑定到a const A&,这是隐式默认的复制c'tor和复制赋值运算符接受的.这就是你所说的.
您"出现"的事实std:move并不意味着定义了任何这些移动操作.
如果你A(A&) = default;在课堂上添加一个,那么事情将开始用红色加下划线.因为现在copy c'tor接受一个非const左值引用,它不会绑定到a A&&.
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |