c++异常处理程序中嵌套的try..catch
Nested try...catch inside C++ exception handler?
我想在异常处理程序中执行的代码本身可能会抛出异常。
下面的结构是合法的c++吗?如果有,有什么缺点吗?
try
{
// ...
}
catch (const E&)
{
try
{
// ...
}
catch (const F&)
{
}
}
实际上,甚至有一种使用嵌套try/catch块的有趣技术:假设您有多个函数需要有效地进行相同的异常处理。特别是在包装另一个接口时,这是常见的情况。在这种情况下,可以捕获所有异常,从异常处理程序调用函数,并在该函数中重新抛出异常以实现实际的异常处理:
void fancy_handler() {
try {
throw; // assumes that fancy_handler() is called from catch-clause
} catch (std::runtime_error const& rt) {
std::cout << "runtime-error: " << ex.what() << "n";
} catch (std::exception const& ex) {
std::cout << "excption: " << ex.what() << "n";
} catch (...) {
std::cout << "unknown exceptionn";
}
}
void foo() { try { do_foo(); } catch (...) { fancy_handler(); } }
void bar() { try { do_bar(); } catch (...) { fancy_handler(); } }
我就是喜欢避免重复的[重要的]代码!
不,没有缺点。你应该这样做
相关文章:
- 编译器是否必须始终删除 try-catch 块(如果它被证明是非抛出的)
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 我可以使用 try catch 语句来捕获任何错误而不是具体错误吗?
- 在大型应用程序的main上使用try-catch
- RapidXML 节点在 try catch 块中具有正确的值,但它在块外为 nullptr
- 提取 try-catch 时出现运行时错误
- std::unique_ptr 在 try-catch 块中未捕获取消引用异常
- 何时删除 try-catch 块中的指针
- 是否有理由大多数/所有 try-catch 示例只对 throw 语句使用 void 子函数
- 循环try..catch ..确保输入有效或使用控制语句
- 构造函数中的异常:init() 方法、指针、大型 try/catch 或
- C++ C2509 在讲师的定义中使用 try: - catch
- 为什么未达到的 try-catch 块会增加运行时时间
- 在 C++ 中使用 try-catch 进行删除 [] 或删除操作是否必要
- ex.nested try-catch中的什么()更改
- 为什么 c++ try-catch 块不能在 ubuntu 上与 g++ 一起使用?
- 格式化文件异常被 try catch 块忽略
- libpng错误不会被try/catch块捕获
- 在 C++ 和 C# 中使用 try/catch 的正确方法是什么?
- c++中try-catch块的catch中使用了哪些参数