动态类型转换(dynamic_cast)是如何失败的?

20

根据我所读的,执行错误的run-time dynamic_cast可能会抛出bad_cast异常或返回零。

如果你正在进行指针转换,那么说它将返回零是正确的吗?

例如:

class Base { virtual void a(){} };
class Derived: public Base {};

int main () {
  Base *base = new Base();
  dynamic_cast<Derived*>(base);
  return 0;
} 

那么这意味着当强制转换对象时,它会抛出一个bad_cast异常吗?

即:

class Base { virtual void a(){} };
class Derived: public Base {};

int main () {
  Base base;
  Base& ref = base;
  dynamic_cast<Derived&>(ref);
  return 0;
}
1个回答

36

dynamic_cast 在指针转换时,如果发生了错误的类型转换,将返回 NULL;若在引用转换中出现错误,则会抛出 std::bad_cast 异常。尝试使用 dynamic_cast 转换对象(例如: dynamic_cast<Derived>(base))是一个编译时错误。


好的,所以这个肯定是正确的。谢谢。我编辑了消息,使基类成为多态(添加虚函数),并使用引用转换来抛出异常。 - NIGO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接