【发布时间】:2016-10-01 20:12:07
【问题描述】:
考虑以下代码:
class TBase {
public:
TBase();
TBase(const TBase &);
};
class TDerived: public TBase {
public:
using TBase::TBase;
};
void f() {
TBase Base;
TDerived Derived(Base); // <=== ERROR
}
所以,我有基类和派生类,并且想使用“使用 TBase::TBase”从基类中提取复制 ctor 以便能够以这种方式创建派生类的实例:
TDerived Derived(Base);
但是all compilers 拒绝了这些错误消息
7 : note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'TBase' to 'const TDerived' for 1st argument
为什么?我究竟做错了什么?为什么“使用 TBase::TBase”在这种情况下不起作用?
更新 下面cppreference.com的一段代码怎么解释?
struct B1 {
B1(int);
};
struct D1 : B1 {
using B1::B1;
// The set of inherited constructors is
// 1. B1(const B1&)
// 2. B1(B1&&)
// 3. B1(int)
【问题讨论】:
-
因为特殊的成员函数没有被继承?那是没有意义的。你最终得到的不是“复制构造函数”。