之间有什么区别:异常重新抛出
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