我仍然想知道为什么下面给出了 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/