如前所述,這是可能的,但你必須看到「落空' - 在這方面。如果在第一個try-catch-block中你的異常被捕獲,它將不會被外部catch-block捕獲。但是,如果它沒有被內部catch-block捕獲,它將嘗試在外部catch-block中找到匹配的異常處理程序。
您也可以明確地進一步在內部異常處理程序使用throw;
引發異常到下一個異常處理。
例如下面的代碼:
try
{
try
{
throw std::runtime_error("Test");
}
catch (std::runtime_error& e)
{
std::cerr << "Inner Exception-Handler: " << e.what() << std::endl;
throw;
}
}
catch (std::exception& e)
{
std::cerr << "Outer Exception-Handler: " << e.what() << std::endl;
}
會導致:
Inner Exception-Handler: Test
Outer Exception-Handler: Test
這工作,因爲std::runtime_error is derived from std::exception。 你還應該注意到,在這樣一個簡單的例子中,也可以將catch-blocks彼此相繼編寫,但是如果你想在第一個catch塊之後執行其他代碼,則必須嵌套它們。
你只是喜歡這些認爲自己比其他人更聰明的人,並認爲自己擁有這個網站 – 2009-02-16 15:22:03
我通常會給這些類型的問題帶來懷疑:僅僅因爲它對編譯器有效並不意味着它就是其中的一部分的標準。反過來也是如此。 – rmeador 2009-02-16 15:28:21