异常处理的语法
如果某段程序发现了自己不能或不想处理的异常,就可以使用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; }