异常
- 程序中的错误
- 语法错误
- 编译错误
- 链接错误
- 运行错误
- 不可预料的逻辑错误
- 可以预料的运行异常
异常处理
- 将异常交给上层函数处理,减轻底层负担,提高程序运行效率
异常处理步骤
- try:检查异常
- throw:抛出异常
- catch:捕捉异常信息后进行处理
try和catch >> 上级函数中处理
throw >> 可能出现异常的当前函数中处理
#include <iostream> #include <stdio.h> using namespace std; int divide(int x, int y) { if (y == 0) throw y; //分母为0则抛出异常 return x / y; } void output(char x, char y,int m,int n) { printf("%c/%c= ", x, y); printf("%d\n",divide(m, n)); } int main() { int a = 10, b = 5, c = 0; try //检查是否出现异常 { output('a', 'b', a, b); output('b', 'a', b, a); output('a', 'c', a, c); output('c', 'a', c, a); } catch (int) { cout << "except of divide zero" << endl; } cout << "计算结束" << endl; return 0; }
try在先,catch在后,且中间不能有任何其它语句
只能有一个try块,但可以有多个catch块对应不同的异常
过程:
没有发生异常,则跳过catch块
try中出现异常,throw抛出异常信息转到上级函数的catch,寻找与之匹配的子句(就像上面提供的代码中的catch一样)。处理完该异常之后,try后面的语句不再执行,转去执行catch块后面的语句