2017-05-26 49 views
-1
#include <iostream> 
using namespace std; 

struct A 
{ 
    virtual void foo() { } 
}; 
struct B1 :A 
{ 
}; 

int main() 
{ 
    int x = 42; 
    A *a = (A*)&x; 
    try 
    { 
     B1 *b = dynamic_cast<B1*>(a); 
    } 
    catch (...) 
    { 
     cout << "what kind of exception is here now?"; 
    } 
    return 0; 
} 

我趕上什麼類型的異常?的dynamic_cast指針異常捕獲

還有什麼可以我寫在括號:趕上(...)來捕獲這個異常呢?

+2

一個'dynamic_cast'與指針不會拋出異常,它產生一個'nullptr'如果失敗。 –

+3

'A * A =(A *)&X;'即無效。 – Jarod42

+1

這段代碼是無稽之談。不要這樣做。 –

回答

2

指針類型之間的dynamic_cast不會拋出,它只會返回nullptr。如果你想扔dynamic_cast,在參考類型之間轉換。例外將是std::bad_cast

http://en.cppreference.com/w/cpp/language/dynamic_cast

如果轉換失敗,NEW_TYPE爲指針類型,它返回類型的空指針。如果轉換失敗,NEW_TYPE是引用類型,它拋出一個匹配類型性病的處理器:: bad_cast異常。