在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构造函数的规则


关于这一切的复杂性*
规则可能会有些压倒性。最好使用某种技术绕过复杂性。例如:

  • 利用rule of zero简化大多数类的编写。
  • (在隐式删除上)明确默认所涉及的特殊成员函数;如果将其隐式定义为Delete,则编译器将提示。

  • *我本人(1)和dyp(2)在评论中提出的要点

    10-08 08:31
    查看更多