有什么区别:
foo();
和
try{
foo();
} catch (...){
throw;
}
据我了解 - 如果调用 foo() 的函数中没有 try-catch 块 - 异常将被外部函数的 try-catch 块捕获(如果有的话)。我是对的吗?
但是如果在调用 foo() 的函数中有一个 try-catch 块,但是没有可以处理它的捕手 - 我必须写 catch (...) { throw; } 让它被外面的人抓住?有必要吗?
有什么区别:
foo();
和
try{
foo();
} catch (...){
throw;
}
据我了解 - 如果调用 foo() 的函数中没有 try-catch 块 - 异常将被外部函数的 try-catch 块捕获(如果有的话)。我是对的吗?
但是如果在调用 foo() 的函数中有一个 try-catch 块,但是没有可以处理它的捕手 - 我必须写 catch (...) { throw; } 让它被外面的人抓住?有必要吗?
没有操作数的 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; /
} /