c++异常处理(一)概述

一 c++异常处理概述:

1.概念:

异常:程序运行时出现的不正常,例如耗尽了内存或遇到非法输入。异常存在于程序的正常功能之外,并要求程序立即处理。通过异常可以把问题的检测和问题的处理分开。

异常处理机制:提供程序中错误检测与错误处理部分之间的通信。


2.c++的异常处理包括:

*throw表达式(throw expression):错误检测部分使用这种表达式来说明遇到了不可处理的错误,即throw引发了异常条件。

*try块(try block):错误处理部分使用它来处理异常。try语句块以try关键字开始,并以一个或多个catch字句结束。在try块中执行的代码所抛出的异常,通常会被其中一个catch子句处理。

*标准库定义的一组异常类:用来在throw和catch之间传递有关的错误信息。

(1)throw表达式

系统通过throw表达式抛出异常。throw表达式的类型决定了所抛出对象的类型。

如:throw runtime_error("this is a exception").


(2)try块

try块的通用语法形式:

try{

program-statements

}catch(exception-specifier){

handler-statements

}

catch(exception-specifier){

handler-statements

}//...


try块以关键字try开始,后面是花括号括起来的语句序列块。try块引入局部作用于,在try块中声明的变量,包括catch子句中声明的变量,不能在try外面使用。

catch子句包括三个部分:关键字catch、圆括号内单个类型或者单个对象的声明-异常说明方法(exception-specifier)、用花括号括起来的语句块。一旦catch子句执行结束,程序流立即继续执行紧随着最后一个catch子句的语句。


寻找处理代码过程:抛出一个异常,首先要搜索的是抛出异常的函数,如果没有找到匹配的catch,则终止这个函数的执行,并在调用这个函数的函数中寻找匹配的catch,如果仍然没有找到相应的处理代码,该函数同样终止,搜索调用它的函数。如此类推,直到找到适当类型的catch为止。

如果不存在匹配的catch子句,程序的运行就要跳转到名为terminate的标准库函数,该函数在exception头文件中定义,terminate函数的行为依赖于系统,通常情况下将导致程序非正常退出。


(3)标准异常类

标准异常类层次如下:


标准异常类定义在四个头文件中

*exception头文件:定义了最常见的异常类,它的类名为exception,这个类只通知异常的产生,但不会提供更多信息。

*stdexcept头文件:定义了几种常见的异常类。如:runtime_error类(继承runtime_error的range_error、overflow_error和underflow_error)、logic_error类(继承logic_error的domain_error、invalid_argument、length_error和out_of_range)



*new头文件:定义了bad_alloc异常类型,提供由于无法分配内存而由new抛出的异常。

*typeinfo头文件:定义了bad_cast异常类型。


标准异常类只提供很少的操作,包括创建、复制异常类型对象以及异常类型对象的赋值。

*exception、bad_alloc和bad_cast只定义了默认构造函数,无法在创建对象时提供处置。

*其他异常类型对象只定义了一个使用string初始化式的构造函数。当需要定义这些类型的对象时,必须提供一个string参数。string初始化式用于为所发生的错误提供更多的信息。

*异常类型只定义了一个what操作。这个函数不需要任何参数,并且返回const char *类型的值(即C风格字符数组)。这个数组的内容依赖于异常对象的类型:对于接受string初始化式的异常类型,what返回该string作为C风格字符数组;对于其他异常类型,返回的值则根据编译器的变化而不同。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值