dynamic_cast如何失败?

时间:2011-08-30 02:24:32

标签: c++ dynamic-cast

根据我所读到的,执行错误的运行时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 个答案:

答案 0 :(得分:30)

如果要转换指针,

dynamic_cast将在错误的转换中返回NULL;它会在投射引用时抛出std::bad_cast。尝试使用dynamic_cast强制转换对象是一个编译时错误(例如,使用dynamic_cast<Derived>(base)