在C++ 98中,C++编译器可以通过成员级副本(例如)自动生成副本构造函数和副本赋值运算符。
struct X {
std::string s;
std::vector<int> v;
int n;
};
编译器使用成员级副本自动为
X
生成副本构造函数和副本赋值运算符。但是在C++ 11中,具有 move 语义的事物如何发生变化?
是否自动生成了 move 构造函数和 move 赋值运算符,例如副本构造函数和副本赋值运算符?
在某些情况下不会自动生成 move 操作吗?
最佳答案
从标准 channel 12-特殊成员功能
参数12.8 复制和 move 类对象(重点是我的)
然后11
解释删除默认move构造函数的规则
关于这一切的复杂性*
规则可能会有些压倒性。最好使用某种技术绕过复杂性。例如:
*我本人(1)和dyp(2)在评论中提出的要点