有什么区别:
foo();
和
try{
foo();
} catch (...){
throw;
}
据我所知 - 如果函数中没有调用foo()的try-catch块 - 异常将被外部函数的try-catch块捕获(如果有的话)。我是对的吗?
但是如果在调用foo()的函数中有一个try-catch块,但是没有catcher可以处理它 - 我必须写catch(...){throw;让它被外面的人抓住?有必要吗?
答案 0 :(得分:2)
没有操作数的throw-expression重新抛出异常 处理。 [第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; /
} /