异常重新抛出

时间:2013-10-22 12:07:18

标签: c++

有什么区别:

foo();

try{
    foo();
} catch (...){
    throw;
}

据我所知 - 如果函数中没有调用foo()的try-catch块 - 异常将被外部函数的try-catch块捕获(如果有的话)。我是对的吗?

但是如果在调用foo()的函数中有一个try-catch块,但是没有catcher可以处理它 - 我必须写catch(...){throw;让它被外面的人抓住?有必要吗?

1 个答案:

答案 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;      /
}              /