C++异常处理 try catch throw

来源:互联网 发布:淘宝香水四大靠谱点 编辑:程序博客网 时间:2024/06/07 02:51
程序的错误大致可以分为三种,分别是语法错误、逻辑错误和运行时错误:
1) 语法错误在编译和链接阶段就能发现,只有 100% 符合语法规则的代码才能生成可执行程序。


2) 逻辑错误是说我们编写的代码思路有问题,不能够达到最终的目标,这种错误可以通过调试来解决。


3) 运行时错误是指程序在运行期间发生的错误,例如除数为 0、内存分配失败、数组越界、文件不存在等。C++ 异常(Exception)机制就是为解决运行时错误而引入的。


运行时错误如果放任不管,系统就会执行默认的操作,终止程序运行,也就是我们常说的程序崩溃(Crash)。C++ 提供了异常(Exception)机制,让我们能够捕获运行时错误,给程序一次“起死回生”的机会,或者至少告诉用户发生了什么再终止程序。(以上引用他人的)

Try{…}

Catch{…}

{}不可省略

throw中抛出异常

执行顺序:

1.首先执行try块内容;若没有异常,执行catch之后的内容。Catch块只在有异常并且类型匹配时才执行;

2.若执行的throw,一个异常对象得到创建;若在try块中,后面的catch执行类型匹配。

3.若在try’块外,或异常与类型不匹配,则回到当前函数调用点,重复寻找匹配类型的过程;

4.若最终没有找到,运行库函数terminate,终止程序;

#include using namespace std;templatedouble devide(T a,T b) throw(string){   if(b==0)   {       string c="b is zero";       throw c;   }    return a/b;}int main(){    double b;    try{    b=devide(7.0,0.0);    b=devide(7.0,1.1);    }    catch(int){    }//    catch (string v){//        cout<
输出:


类型匹配成功:

#include using namespace std;templatedouble devide(T a,T b) throw(string){   if(b==0)   {       string c="b is zero";       throw c;   }    return a/b;}int main(){    double b=0;    try{    b=devide(7.0,0.0);    b=devide(7.0,1.1);    }    catch(int){    }    catch (string v){        cout<
输出:
注意,
1.异常抛出后,try块内剩余内容不会得到执行,而try,catch体系后其他内容依旧会得到执行
2.异常执行顺序依照catch中其出现顺序,所以顺序很重要;
3.catch(...)应对所有异常
4.函数后还可以加入异常接口声明,指明该函数可以抛出什么异常,如抛出的不相符,执行unexpected函数,该函数默认调用函数terminate,终止程序。
没有声明,表示可以抛出任何异常;
throw()空的表明不会抛出异常;
5,catch内或其子函数,还可将异常继续抛出;写作throw;即可,抛出源对象,非副本;
6.异常抛出前,对所有构造的对象自动调用析构函数(unwinding);
7.异常的引发与处理不必在一个函数中;

异常的匹配条件:
1.catch的异常声明类型是抛出对象类型或引用
2.catch的异常声明类型是抛出对象类型的基类或引用
3.catch的异常声明类型,抛出对象类型,都是指针类型,且后者可以隐式转化为前者,如派生类指针转化为基类指针








原创粉丝点击