异常
- 程序中的错误
- 语法错误
- 编译错误
- 链接错误
- 运行错误
- 不可预料的逻辑错误
- 可以预料的运行异常
- 语法错误
异常处理
- 将异常交给上层函数处理,减轻底层负担,提高程序运行效率
异常处理步骤
- 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块后面的语句