gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:25 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com