C++虚拟继承和类型转换/复制构造函数混淆

Pan*_*sis 3 c++ casting copy-constructor virtual-inheritance

我有以下代码:

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());
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,B(const A&a)没有被调用.这是为什么?

Jam*_*lis 8

B 还有一个声明为隐式声明的复制构造函数

B(const B&);
Run Code Online (Sandbox Code Playgroud)

这个隐式声明的成员函数被调用,因为它C比用户声明的构造函数更适合类型的参数B(const A&).