C++为我们提供了一种结构化形式的,更为优雅的异常处理机制,这种结构化机制可以把程序中正常执行的代码和异常处理的部分分开表示,使程序变得更清晰易读,更为优雅!
下面,来看异常处理的结构,共分两部分:
try{//正常程序执行语句throw(异常类型表达式);}catch(异常类型1){//异常处理代码}catch(异常类型2){//异常处理代码}catch(异常类型3){//异常处理代码}//后续代码
以上是C++中异常处理的代码形式,用到了try、throw、catch三个关键词。
代码在执行时,首先遇到try代码块,作用就是启动异常处理机制,检测try代码执行中遇到的异常,然后通过throw进行抛出,throw当中的异常类型表达式是常量或变量表达式。接下来会和后面的catch语句块进行匹配(捕获),然后执行对应的代码。如果没有发现可以匹配的类型则,则继续向下执行。如若未找到匹配,则自动调用terminate()结束函数,默认功能是abort()终止程序.
下面举一个除法运算时,除数为0时候的一个异常处理:
#include<iostream>usingnamespacestd;intmain(){inta,b;cin>>a>>b;try{if(b==0)throwerror!b<0;}catch(constchar*str){cout<<str<<endl;}catch(int){cout<<throwint<<endl;}return0;}
可以看到,在try中,如果发现b为0会抛出一个字符串,那么此时会进入catch匹配,很明显将匹配第一个catch,进而输出str的值,请大家自行理解!