C++中异常处理中的异常重新抛出的一种用法

来源:互联网 发布:笔记本颜色校准软件 编辑:程序博客网 时间:2024/06/12 22:34

C++中使用try...catch语句进行异常的的处理,通过throw语句进行异常的抛出,结构如下:

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

这是一般的异常处理的形式,C++中还支持异常的重新抛出,即在catch语句中继续抛出异常,形如:

try{throw ...;}catch (int i){throw; //此时throw语句后面不需要任何表达式!!}
为什么要重新抛出异常呢,这有何意义呢?请考虑如下场景

假设存在一个第三方库,我们需要使用自己的函数进行调用,此时就体现出重新抛出异常的意义了;

有如下代码:

#include<string>#include <iostream>using namespace std;/*第三方库中函数 void func(int i)异常代码   -1:运行时错误 -2:数据超界异常*/void func(int i){if(i<0)throw -1;if(i>100)throw -2;}int main(){try{func(199);}catch (int i){cout<<"Error Code: "<<i<<endl;}return 0;}

运行结果如下:

Error Code: -2


此时我们根本不知道-2代表什么意思,只能去查找函数的手册,不仅麻烦,而且不直观。但是假如代码如下:

#include<string>#include <iostream>using namespace std;/*第三方库中函数 void func(int i)异常代码   -1:运行时错误   -2:数据超界异常*/void func(int i){if(i<0)throw -1;if(i>100)throw -2;}//这是我们自己的库。调用第三方库的函数void func(int i)void myFunc(int i){try {func(i);}catch(int i){switch(i){case -1:throw "Runtime Error";break;case -2:throw "Data Error";break;}}}int main(){try{myFunc(199);}catch (const char *s){cout<<"Error Code: "<<s<<endl;}return 0;}

结果输出如下:

Error Code: Data Error

这样子就不需要每次都根据异常代码查找错误原因。

1 0
原创粉丝点击