异常处理的语法
如果某段程序发现了自己不能或不想处理的异常,就可以使用throw表达抛出这个异常。将它抛给调用者。throw 的操作数表示异常类型,语法上与return操作数相类似。如果程序中有多种要抛出的异常,应该用不同的操作数类型来互相区别。
try子句后的复合语句是受保护的代码段。如果预料某段程序代码或对某函数的调用可能发生异常,就将它放在try块中。如果这段代码运行时真的发生异常,其中throw表达式就会抛出这个异常。
catch子句时异常处理函数,捕获由throw表达式抛出的异常。异常声明部分指明了子句处理异常的类型和异常参数名称。类型可以是有任何有效的数据类型,包括C++的类。当异常被抛出后,catch子句便依次检查,若某个catch子句声明的异常类型与被抛出的异常类型一致,则执行该段代码。如果异常类型是一个省略号,catch子句便会处理所有类型的异常,这段处理程序必须是catch子句的最后一个分支。
下面有一个例子:
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int divide(int a,int b)
{
if(b ==0)
{
throw a;
}
return a/b;
}
int main()
{
try
{
printf("5/2 =%d\n",divide(5,2));
printf("8/0 =%d\n",divide(8,0));
printf("7/1 =%d\n",divide(7,1));
}
catch(int e)
{
printf("%d is divide by 0!\n",e);
}
catch(double e)
{
printf("double exception process...\n");
}
catch(...)
{
printf("default exception process...\n");
}
printf("It's ok!\n");
return 0;
}