dynamic_cast如何失败?

NIG*_*IGO 16 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;
} 
Run Code Online (Sandbox Code Playgroud)

并且它会在投射对象时抛出bad_cast异常?

即:

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

int main () {
  Base base;
  Base& ref = base;
  dynamic_cast<Derived&>(ref);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

bdo*_*lan 30

dynamic_cast如果要转换指针,则会在错误的转换上返回NULL; 它会std::bad_cast在投射引用时抛出.尝试使用(例如,with )转换对象是编译时错误dynamic_castdynamic_cast<Derived>(base)