文档详情

小谈C++异常处理.doc

发布:2017-01-31约1.87千字共6页下载文档
文本预览下载声明
小谈C++异常处理 最近打算学习STL,所以先将之前的C++复习一遍打好基础 :-D 期末的日子也越来越近了,不能在像之前那样子有时间了,所以只能写一些更简单的东西啦. :-D C++提供了一种完善的异常处理机制,可以使用try和catch对代码进行保护,截获运行时的错误,还可以使用throw抛出一个异常对象. try{}块中代码运行时,如果出现异常,将按照catch{}块的顺序找到对应的异常对象进行处理 下面的程序展示了简单的try/catch异常处理,第一个try块throw出了一个int类型的异常,第二个try块throw出了一个double类型的异常.后面catch截获了对应的异常. #include stdio.h int main(void){ try{ printf(try:1\n); throw 1; } catch(int i){ printf(catch try:1 int:%d\n, i); } catch(double d){ printf(catch try:1double %f\n, d); } try{ printf(try:2\n); throw 1.2; } catch(int i){ printf(catch try:2 int:%d\n, i); } catch(double d){ printf(catch try:2 double:%f\n, d); } return 0; } 运行结果: try:1 catch try:1 int:1 try:2 catch try:2 double:1.200000 上面的程序只是针对每个异常类型进行处理,你也可以使用catch(…)来处理如何类型的异常. 下面的程序展示使用try/catch(…)来处理被0除的异常. #include stdio.h int main(void){ try{ printf(try:1\n); int a=0; int b=1/a; } catch(...){ printf(catch try:1\n); } return 0; } 运行结果: try:1 catch try:1 对于会抛出异常的函数我们也可以使用try来对其进行保护. 下面的程序就展示了这点,(其实和上面说的是一样的,这里关键是要引出下文) #include stdio.h void func(){ throw 1; } int main(void){ try{ printf(try:1\n); func(); } catch(int i){ printf(catch try:1 int:%d\n, i); } return 0; } 我们用catch到函数抛出的异常,还可以限定一个函数能够抛出的异常类型 在函数声明后面加上函数可能抛出的异常类型的列表. 如上面的func函数,可以改成下面的形式 void func() throw(int) { throw 1; } 如果给出的可能抛出的异常类型类表为空的话,表示不会抛出任何类型的异常 下面的程序就设置了函数的抛出异常类型类表为空,然后抛出了异常,于是程序被提前终止. void func() throw() { throw 1; } int main(void){ func(); return 0; } 运行结果: 我们也可以在截获到异常的时候继续抛出异常 #include stdio.h void func(){ try{ throw 1; } catch(int){ printf(catch func\n); throw; //继续抛出异常,然后函数返回 } printf(这条语句不会被执行\n); } int main(void){ try{ func(); } catch(int){ printf(catch main\n); } return 0; } 运行结果: catch func catch main 到此为止,上面只是对于C++异常处理简单的介绍一下,不够对于我目前的开发来说知道这些就够用了. 今晚是平安夜,祝大家快乐啊!
显示全部
相似文档