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
- C++中异常处理中的异常重新抛出的一种用法
- php异常处理—重新抛出异常
- C++中的rethrowing 异常重新抛出
- finally 中抛出异常处理
- 重新抛出异常
- c++ 重新抛出异常
- java重新抛出异常
- C语言中一种更优雅的异常处理机制
- 转贴 C语言中一种优雅的异常处理机制
- C语言中一种优雅的异常处理机制
- C语言中一种更优雅的异常处理机制
- 10.3 异常的重新抛出和catch_all
- Java中的异常处理:何时抛出异常,何时捕获异常?
- Objective-C 编程语言(11)异常处理----捕获多种类型的异常、抛出异常
- c抛出异常给java处理
- C# 中 throw ( 抛出异常 )的用法
- c++构造函数中抛出异常的用途和用法
- 在Javascript中处理MFC ActiveX 抛出的异常
- 解决导入的Android项目中出现的The project was not built since和 Unable to resolve target 'android-19'错误
- mongodb
- TOJ 1859.Goldbach's Conjecture
- 死锁
- foxscan的安装笔记~
- C++中异常处理中的异常重新抛出的一种用法
- JAVA基础day04 数组学习 排序和查找基本算法
- The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
- nyoj 219 An problem about date
- 最小表示法
- HDU 1505 City Game(dp)
- 字符串的排列
- 【快速搞定】2分钟搞定极光推送(极光推送Android端集成)
- IM软件的全流程加密过程