其他分享
首页 > 其他分享> > C虚拟继承和类型转换/复制构造函数混淆

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