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

标签 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());
}

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

最佳答案

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

B(const B&);

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

关于C++虚拟继承和类型转换/复制构造函数混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3761587/

相关文章:

c++ - 在 Visual Studio 中播放 .wav 文件时出错

java - 将父类扭曲为子类

c++ - 在此 C++ 代码段中,复制构造函数被调用了多少次?

C++ 按值返回

c++ 多项式复制构造函数和 ostream 覆盖导致内存泄漏?!

c++ - 如何运行示例 Armadillo 程序

c++ - 让线程在自旋锁中休眠的方法

c++ - 安装多个版本的 g++(或 gcc)

date - 从带破折号的字符串解析 Pandas 列到日期

c - 检测从 void * 到错误指针类型的转换