C++中异常处理中的异常重新抛出的一种用法
2016-09-08 21:56
281 查看
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
这样子就不需要每次都根据异常代码查找错误原因。
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
这样子就不需要每次都根据异常代码查找错误原因。
相关文章推荐
- C++ - 异常处理:try,catch,throw,finally的用法
- c++学习之异常处理简单用法
- php异常处理—重新抛出异常
- 【Java学习笔记之三十二】浅谈Java中throw与throws的用法及异常抛出处理机制剖析
- C++异常的重新抛出和catch_all子句
- C++异常处理 - try,catch,throw,finally的用法
- 【Java学习笔记之三十二】浅谈Java中throw与throws的用法及异常抛出处理机制剖析
- c++ 重新抛出异常
- C++异常抛出与捕获及处理
- C++异常处理assert,throw,exit用法
- C++异常处理:try,catch,throw,finally的用法
- C++异常处理:try,catch,throw,finally的用法
- C++异常处理:抛出异常throw,捕获异常catch(...)
- Java基础学习总结(86)——Java异常处理机制Exception抛出异常时throw和throws用法详解
- C++中try_catch_throw的做异常处理用法
- C++异常处理: try,catch,throw,finally的用法
- java 重新抛出异常 相关处理结果示例代码
- [置顶]C++异常处理:try,catch,throw,finally的用法
- C++异常抛出与捕获及处理
- Java基础学习总结(86)——Java异常处理机制Exception抛出异常时throw和throws用法详解