的想法是「嘗試you()
,如果失敗嘗試_do()
,如果失敗的話,從第一次嘗試上報例外,即you()
」。重新拋出一個有嵌套異常的catch塊的異常嗎?
void that_thing() {
try {
you();
} catch(...) {
bool error=false;
try {
_do();
} catch(...) {
error = true;
}
if(error) throw;
}
}
使用Gcc測試它工作正常,我想知道它是否可以與任何編譯器一起使用。爲了更清楚,我期待的奇怪行爲是throw;
將重新拋出內部異常。
編輯:這個問題是不是最內側catch
,它是關於最醒目內後重新拋出外層的異常。問題在於,如果這種重新投票在法律上絕對沒有被提及的問題被指出爲類似的問題。
另一個類似的問題:http://stackoverflow.com/questions/3526167/exception-handling-try-catch-inside-catch – 2014-09-03 07:51:47
一致認爲它看起來不像它被關閉了,但我我不確定是什麼引發了這個問題。我會說「當然它不會重新拋出內在的例外」。考慮一個簡單的'try {foo(); } catch(...){bar();扔; }'。我從來沒有見過任何人擔心'bar'在內部拋出並捕獲異常時會發生什麼。你能否擴展一下你爲什麼認爲內部異常可能被重新拋出?更具體的問題可以得到更好的答案。 – hvd 2014-09-03 08:40:11
沒有諮詢的標準或有任何特殊的知識對這個問題我會大膽地猜測,這只是罰款和編譯器*必須*跟蹤最例外。否則,如果'_DO()''使用嘗試/ catch'本身幕後和它剛剛吞下異常*和它得到了內聯*(甚至不內聯?),不好的事情會發生在你的代碼。 – 2014-09-03 08:43:18