C++异常

转载:https://www.cnblogs.com/riskyer/p/3221912.html

C++的异常处理结构为:

try

{

//可能引发异常的代码

}

catch(type_1 e)

{

// type_1类型异常处理

}

catch(type_2 e)

{

// type_2类型异常处理

}

catch (...)//会捕获所有未被捕获的异常,必须最后出现

{

}

异常的抛出方式使用throw(type e),try、catch和throw都是C++为处理异常而添加的关键字。

异常处理的过程:

1、  程序或运行库遇到一个错误状况(在try块中);

2、  抛出一个异常,程序的运行停止于异常点;

3、  开始搜索异常处理函数。搜索沿调用栈向上搜索,搜索结束于找到了一个异常申明与异常对象的静态类型相匹配;

4、  进入相应的异常处理函数;

5、  异常处理函数结束后,跳到此异常处理函数所在的try 块下面最近的一条语句开始执行。

在C++中,throw抛出异常的特点有:

(1)可以抛出基本数据类型异常,如int和char等。其中;

(2)可以抛出复杂数据类型异常,如结构体(在C++中结构体也是类)和类;

(3)C++的异常处理必须由调用者主动检查。一旦抛出异常,而程序不捕获的话,那么abort()函数就会被调用,弹出如图1所示的对话框,程序被终止;

(4)可以在函数头后加throw([type-ID-list])给出异常规格,声明其能抛出什么类型的异常。type-ID-list是一个可选项,其中包括了一个或多个类型的名字,它们之间以逗号分隔。如果函数没有异常规格指定,则可以抛出任意类型的异常。

如果一种异常没有被指定catch模块,则将导致terminate()函数被调用,terminate()函数中会调用ahort()函数来终止程序。可以通过set_terminate(terminate_handler)函数为terminate()专门指定要调用的函数。

 

posted @ 2018-09-29 15:30  _KikyoBK  Views(121)  Comments(0Edit  收藏  举报