小编ska*_*oto的帖子

为什么移动构造函数涉及到此处

我有这段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)

这不会编译,因为对象的构造c1c2似乎涉及到类的移动构造函数:

error: use of deleted function ‘MyClass::MyClass(MyClass&&)’

似乎编译器想要创建临时对象,然后将它们移动到c1c2.为什么会这样?不应该所有三个语句都只调用MyClass(Args& a)构造函数吗?

另一方面,如果我创建移动构造函数,程序编译正常,移动构造函数永远不会被调用!

c++ initialization copy-elision c++11

8
推荐指数
3
解决办法
235
查看次数

标签 统计

c++ ×1

c++11 ×1

copy-elision ×1

initialization ×1