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是否可以复制?我知道有关删除特殊方法的问题,但复合赋值不是一种特殊的方法(对吧?).
是的,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)是特殊成员函数.