2011-08-30 147 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