“不合成”和“定义为删除”之间有什么区别?

时间:2014-12-29 02:38:58

标签: c++ c++11 move rvalue-reference

我读过C ++ Primer 5th,发现移动构造函数和移动赋值令人困惑。

在一页上,它说:

  

编译器只合成移动构造函数和移动赋值   如果一个类没有定义任何自己的拷贝控制成员和   只有所有数据成员都可以移动构造和移动   分别分配。

在另一页上,它说:

  

如果我们明确要求编译器生成移动操作   using = default,编译器无法移动所有成员,   然后移动操作将被定义为已删除。

"没有合成"和"将被定义为已删除"?

1 个答案:

答案 0 :(得分:3)

定义为已删除的函数仍然参与重载解析;如果被选中,该程序就会形成错误。如果一个函数根本不存在,它当然不会参与重载决策。