之間有什麼區別:異常重新拋出
foo();
和
try{
foo();
} catch (...){
throw;
}
我的理解 - 如果在功能上沒有的try-catch塊調用foo() - 異常會被外部函數的try-catch塊捕獲(如果有的話)。我對嗎?如果有函數調用foo(),但沒有捕捉者可以處理它的try-catch塊 - 我必須寫catch(...){throw;讓它被外面的人抓住?有必要嗎?
之間有什麼區別:異常重新拋出
foo();
和
try{
foo();
} catch (...){
throw;
}
我的理解 - 如果在功能上沒有的try-catch塊調用foo() - 異常會被外部函數的try-catch塊捕獲(如果有的話)。我對嗎?如果有函數調用foo(),但沒有捕捉者可以處理它的try-catch塊 - 我必須寫catch(...){throw;讓它被外面的人抓住?有必要嗎?
沒有操作數的拋出表達式拋出異常處理爲 。 [§15.1/ 8]
所以實際上也是一樣的。
異常會被外界的功能try-catch塊被捕獲(如果 有的話)。我對嗎?
是的。
但如果有什麼功能一個try-catch塊調用foo(), 但沒有捕手誰可以處理它 - 我必須寫趕上(...){拋出; 扔;讓它被外面的人抓住?有必要嗎?
處理您希望在呼叫點處理它們並將其他人處理的異常。你不必重新扔掉它們。如果沒有捕手,最終會捕獲異常std:terminate
將被調用。
try
{
foo();
}
catch (YourExpectedException &ex)
{
// ...
}
catch (...) \
{ \
> // You don't need this kind of re-throwing
throw; /
} /
感謝您的回答! –
只抓住你能處理的事情,或者如果你需要做地方清理。 –
剛剛重新拋出的一切都基本上沒有任何操作,並且沒有任何用處。 –
例外情況應該通常以最適合的級別進行處理。所以如果'foo()'對某些異常有異常處理,它只是它知道如何處理的異常。如果調用'foo()'的函數知道如何處理所有異常情況,那麼'''一般都可以 - 意味着你知道你在做什麼。或者,也可以在這裏處理特定的異常,並讓未知的異常傳播...因此,總而言之,取決於拋出什麼...... – Nim