异常重新引发

Exception rethrowing

本文关键字:新引发 异常      更新时间:2023-10-16

两者之间有什么区别:

foo();

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

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

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

没有操作数的抛出表达式将异常重新引发为 处理。[§15.1/8]

所以在实践中也有同样的情况。

 

异常将被外部函数的 try-catch 块捕获(如果 有)。我说的对吗?

是的。

 

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

处理异常,期望您在调用点处理它们并保留其他异常。您不必重新扔掉它们。如果没有捕获量,则最终捕获异常std:terminate将被调用。

try
{
    foo();
}
catch (YourExpectedException &ex)
{
  // ...
}
catch (...)    
{               
                 > // You don't need this kind of re-throwing
    throw;      /
}              /