具有已删除方法的C++类是否可以轻松复制?

hel*_*vio 4 c++ language-lawyer c++11

我希望B类继承除A类的几个方法之外的所有方法(假设它们都是可复制的),并且仍然可以轻易地复制.在C++ 11中,我可以删除方法.举个例子:

class A { // trivially copyable
   // private stuff here
public:
   A& operator += (const A&);
   // other public stuff here
};

class B: public A {
public:
   B& operator += (const A&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

B是否可以复制?我知道有关删除特殊方法的问题,但复合赋值不是一种特殊的方法(对吧?).

Col*_*mbo 9

是的,B可以轻易复制 - 无论您对非特殊成员函数做什么.

N3337,§9/ 6:

一个简单的可复制类是一个类:
- 没有非平凡的复制构造函数(12.8),
- 没有非平凡的移动构造函数(12.8),
- 没有非平凡的复制赋值运算符(13.5.3,12.8),
- 没有非平凡的移动赋值运算符(13.5.3,12.8),并且
- 有一个简单的析构函数(12.4).

但复合赋值不是一种特殊的方法(对吧?)

不,这不对.

N3337,§12/ 1:

默认构造函数(12.1),复制构造函数和复制赋值运算符(12.8),移动构造函数和移动赋值运算符(12.8)以及析构函数(12.4)是特殊成员函数.