学科分类
目录
C++基础

异常处理模式

异常处理模式是指,处理完异常后,程序的执行流程。本节中将介绍默认的异常处理模式—终止。所谓终止模式,是指异常抛出后,将退出导致异常的子程序或结构,转而去执行捕捉异常的catch块,catch块执行完毕后也不会再返回到抛出异常的位置。

接下来还是以除零异常为例,观察终止模式的执行流程,如例1所示。

例1

 1    #include <iostream>
 2    #include <string>
 3    using namespace std;
 4    
 5    int int_div(int a, int b)                                 //实现整数相除的函数
 6    {
 7        if (b == 0){
 8            throw 0;
 9            cout << "after throw!" << endl;
 10        }
 11        return a / b;
 12    }
 13    int main()
 14    {
 15        int int_n1, int_n2;                                    //定义两个整型变量
 16        //循环多次读取数据,完成相除操作
 17        while (1){
 18            cout << "Please input two integers:";
 19            cin >> int_n1 >> int_n2;                         //输入两个整数
 20            try    {
 21                cout << "Maybe exception code:" << endl; 
 22                cout << int_n1 << "/" << int_n2 << " = "
 23                    << int_div(int_n1, int_n2) << endl;   //除数非零显示相除结果
 24                cout << "in try, after div!" << endl;
 25            }
 26            catch (int)                                         //捕捉参数为整型的异常
 27            {
 28                cout << "exception:div 0!" << endl;       //异常处理代码
 29            }
 30            cout << "after try…catch!" << endl;;
 31        }
 32    
 33        return 0;
 34    }

若除数为零,程序的运行结果如图1所示。

图1 例1运行结果

从例1程序运行结果可以看出,若除数为0,在代码第8行int_div()函数中抛出异常,马上转去main()函数中相应的catch块进行处理,打印出信息“exception:div 0!”,执行完catch块后,继续执行main()函数后续语句,并未再次返回int_div()函数执行throw后续内容,因此信息“after throw!”并未被打印出来。

这种捕捉异常后,不再重新返回到抛出异常处执行后续内容的规则,就称为异常终止模式。

点击此处
隐藏目录