對於下面的代碼,結果是「EA異常完成」,這意味着雖然我們拋出派生類,它被基類捕獲。它總是?如果是這樣,我如何使派生類捕獲,從而「EB異常已完成」出現?爲什麼要在派生類捕獲基礎?
另外我不能確切地得到throw EB()
和catch(EA&)
是什麼意思。 catch(EA&)
是否意味着catch塊獲得參考EA 對象?
對不起,我的無知。如果您向我推薦一本書或其他內容來介紹異常結構,那會很有幫助。
class EA {};
class EB: public EA {};
void F()
{
throw EB(); // throw at EB().
}
int main()
{
try
{
F();
}
catch(EA&) // caught here??
{
std::cout<<"EA Exception";
}
catch(EB&) // why not me? every time?
{
std::cout<<"EB Exception";
}
std::cout<<" Finished"<<std::endl;
return 0;
}
一個異常總是被* first * catch塊捕獲,它可以*捕獲它,所以你的訂單是錯誤的。 –
非常感謝您的回答! –