C虚拟继承和类型转换/复制构造函数混淆
作者:互联网
我有以下代码:
class A
{
};
class B: public virtual A
{
public:
B()
{
cerr << "B()";
}
B(const A& a)
{
cerr << "B(const A&)";
}
};
class C: public B
{
};
int main(int argc, char **argv)
{
B *b = new B(C());
}
令我惊讶的是,B(const A& a)没有被调用.这是为什么?
解决方法:
B还有一个声明为隐式声明的复制构造函数
B(const B&);
这个隐式声明的成员函数被调用,因为它比用户声明的构造函数B(const A&)更适合类型C的参数.
标签:virtual-inheritance,c,casting,copy-constructor 来源: https://codeday.me/bug/20190723/1517968.html