我有这段C++代码:
class Args {};
class MyClass {
public:
MyClass(Args& a) {}
MyClass(MyClass &&) = delete;
};
int main() {
Args a;
MyClass c1 = MyClass(a);
MyClass c2 = a;
MyClass c3(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为对象的构造c1
和c2
似乎涉及到类的移动构造函数:
error: use of deleted function ‘MyClass::MyClass(MyClass&&)’
似乎编译器想要创建临时对象,然后将它们移动到c1
和c2
.为什么会这样?不应该所有三个语句都只调用MyClass(Args& a)
构造函数吗?
另一方面,如果我创建移动构造函数,程序编译正常,移动构造函数永远不会被调用!