的想法是“尝试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