是否可以使用对派生类实例的基类引用初始化派生类引用

Can I Initialize a derived class reference with a base class reference to derived class instance?

本文关键字:引用 派生 基类 可以使 初始化 实例 是否      更新时间:2023-10-16

我有如下内容:

class A { ... };
class B : public A { ... };
// ...
B b;
const A& aref(b);
// ...
const B& bref(aref);

当我编译时,我得到:

no suitable user-defined conversion from "const A" to "const B" exists

现在,如果这些是指针而不是引用,我会使用

bptr = dynamic_cast<B*>(aptr);

但参考文献没有这个。我该怎么办?切换到指针?别的?

您可以使用

dynamic_cast作为引用,它们只是抛出异常,而不是在失败时返回nullptr

try {
    const B& bref(dynamic_cast<const B&>(aref));
}
catch (const std::bad_cast& e) {
    //handle error
}

如果你绝对知道aref其实是一个B,那么你可以做一个static_cast

const B& bref(static_cast<const B&>(aref));