根据我所读到的,执行错误的运行时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;
}
答案 0 :(得分:30)
dynamic_cast
将在错误的转换中返回NULL;它会在投射引用时抛出std::bad_cast
。尝试使用dynamic_cast
强制转换对象是一个编译时错误(例如,使用dynamic_cast<Derived>(base)
)