我有这段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;
}
这段代码无法编译,因为创建对象
c1
和 c2
似乎涉及类的移动构造函数:
error: use of deleted function ‘MyClass::MyClass(MyClass&&)’
似乎编译器想要创建临时对象,然后将它们移动到 c1
和 c2
。这是怎么回事?难道这三个语句不应该只调用 MyClass(Args& a)
构造函数吗?
另一方面,如果我确实创建了移动构造函数,则程序可以成功编译,并且从未调用移动构造函数!!!