2

有什么区别:

foo();

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

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

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

4

1 回答 1

2

没有操作数的 throw 表达式重新抛出正在处理的异常。[§15.1/8]

所以在实践中也是如此。

 

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

是的。

 

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

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

try
{
    foo();
}
catch (YourExpectedException &ex)
{
  // ...
}
catch (...)    \
{               \
                 > // You don't need this kind of re-throwing
    throw;      /
}              /
于 2013-10-22T12:09:53.067 回答