从几个函数调用中抛出异常的方法,一直返回到main
Way to throw exceptions out of several function calls all the way back to main?
从几个函数调用中抛出异常并一直返回main的"正确"方法是什么?
例如,我现在正在做的是:
void foo() {
...
try {
...
}catch(a1) {
...
throw(a2);
}
...
}
void baz() {
...
try {
foo();
}catch(a2) {
...
throw(a3);
}
...
}
etc
一定有一种更好的方法可以在不捕获过程中的每个异常的情况下抛出并退出调用堆栈,是吗?
Per[except.shop]
当抛出异常时,控制权将转移到具有匹配类型的最近处理程序(15.3);"最近的"表示控制线程最近为其输入try关键字后面的复合语句或ctor初始值设定项但尚未退出的处理程序。
这意味着,如果抛出异常,并且没有一个处理程序与其类型匹配,则异常将向上传播,直到它找到一个或没有找到。你可以在这个小例子中看到这一点
#include <iostream>
#include <exception>
void foo3() { std::exception e; throw(e); }
void foo2() { try { foo3(); } catch (std::bad_exception){} }
void foo() { foo2(); }
int main()
{
try
{
foo();
}
catch (std::exception & e)
{
std::cout << "caught in main()";
}
}
输出:
caught in main()
实时示例
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 从几个函数调用中抛出异常的方法,一直返回到main