c++ - 通过引用派生类对象从基类对象向下转换时抛出 bad_cast 异常

标签 c++ dynamic-cast downcast

我仍然想知道为什么下面给出了 std::bad_cast 异常

#include <typeinfo>
class A {virtual void fun() {}};
class B : public A {};
int main() {
    try { 
       A a; 
       B b = dynamic_cast<B&>(a);
    } catch (std::bad_cast& e) {
       std::cerr << e.what() << '\n';
    }
}

class A 是一个多态类 B 类公开派生自 A 通过引用从基类 A 对象正确地进行向下转换,dynamic_cast 确实接受引用参数 但为什么还是这个异常(exception)?

最佳答案

这就是dynamic_cast应该做的。 a实际上是A的对象,将其转换为派生类B会失败。另一方面,如果您将某些具有引用类型或指向基类的指针转换为基类,但实际上引用了 B 的对象,那么它将正常工作。例如

B b1;
A& ra = b1;
B b2 = dynamic_cast<B&>(ra);

关于c++ - 通过引用派生类对象从基类对象向下转换时抛出 bad_cast 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43305271/

相关文章:

c++ - Arduino/C++ 交叉函数变量

c++ - Q3DBars 在垂直墙上有网格,怎么样?

c++ - 基本 XQilla XPath 示例

c++ - C++ 中的动态转换到底是什么

c++ - 通过队列传递信息时如何避免向下转型?

c++ - 从 C++ 中的另一个宏调用多个宏

c++ - dynamic_cast 与在父类中公开虚函数 (C++)

c - C 中的继承和方法重写 - 如何使其定义行为

c++ - 将非模板基类向下转换为非类型模板子类

java - 无法在 Java 中使用 List 类进行向下转换