异常重新引发
Exception rethrowing
两者之间有什么区别:
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; /
} /
相关文章:
- 孤立代码块在结构中引发异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 尝试使用智能指针时引发异常
- 如果分配数组引发异常,是否应该释放该数组
- 引发异常的方法的命名约定 (C++)?
- 读取文件时引发异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 从 C++ 中异常的构造函数引发异常
- 尝试将数字写入二进制文件时引发异常
- 在基于英语的系统上将 UTF-8 路径转换为宽字符会引发异常
- zeromq 在 I/O 线程中引发异常
- 发生此错误:在0x0F2BFB7C(基于.dll)时引发异常 尝试更改大小是问题吗?
- 添加新行时工作代码引发异常.调试技巧?
- 重新引发异常保留回溯
- 引发异常:写访问冲突. temp 为 nullptr
- 删除无效地址时C++引发异常
- 从二进制文件中读取元素时引发异常(引发异常:读取访问冲突. _Pnext 0xB414D4)
- 引发异常
- 是否允许分配器构造和销毁成员函数从内部逻辑引发异常?
- 我的数组大小调整代码在新数据上引发异常[size_t]