2011-08-30 31 views
15

根据我所读到的,执行错误的运行时dynamic_cast可以抛出bad_cast异常或返回零。dynamic_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; 
} 

回答

26

dynamic_cast将在一个糟糕的投,如果你把指针返回NULL;当铸造参考文献时,它会抛出std::bad_cast。试图将对象dynamic_cast(例如,使用dynamic_cast<Derived>(base)

+0

这是编译时错误,所以肯定是正确的。谢谢。我编辑了消息,以便使基类具有多态性(添加虚函数)并使用引用投射来抛出异常。 – NIGO