异常处理模式
异常处理模式是指,处理完异常后,程序的执行流程。本节中将介绍默认的异常处理模式—终止。所谓终止模式,是指异常抛出后,将退出导致异常的子程序或结构,转而去执行捕捉异常的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!”并未被打印出来。
这种捕捉异常后,不再重新返回到抛出异常处执行后续内容的规则,就称为异常终止模式。