我读过C ++ Primer 5th,发现移动构造函数和移动赋值令人困惑。
在一页上,它说:
编译器只合成移动构造函数和移动赋值 如果一个类没有定义任何自己的拷贝控制成员和 只有所有数据成员都可以移动构造和移动 分别分配。
在另一页上,它说:
如果我们明确要求编译器生成移动操作 using = default,编译器无法移动所有成员, 然后移动操作将被定义为已删除。
"没有合成"和"将被定义为已删除"?
答案 0 :(得分:3)
定义为已删除的函数仍然参与重载解析;如果被选中,该程序就会形成错误。如果一个函数根本不存在,它当然不会参与重载决策。