struct X
{
X() = default;
X(const X& src)
{
cout << "copy" << endl;
}
};
int main()
{
X x1;
X x2(move(x1));
}
输出: 复制
struct X
{
X() = default;
X(const X& src)
{
cout << "copy" << endl;
}
X(X&& src) = delete;
};
int main()
{
X x1;
X x2(move(x1));
}
编译错误:
error: use of deleted function ‘X::X(X&&)’
28 | X x2(move(x1));
| ^
所以我很困惑。当我没有编写移动构造函数时 - 看起来它没有生成移动构造函数,因为它调用了我的复制构造函数。但是为什么当我显式删除第一个动作时却报错呢?
明确地
delete
ing move ctor 通知编译器故意不允许移动操作。因此,如果遇到一个,就会引发错误。
另一方面,不声明它(五巨头规则)会使其回退到复制构造函数,因为左值引用可以绑定到右值。