C++的异常处理机制
一、异常事件
程序在运行时发生了错误也叫作发生了异常事件,简称发生了异常。常见的异常事件有:除数为零、越界访
问、访问空指针等。如果不在代码中针对可能出现的异常事件提供处理预案,程序可能无法运行甚至崩溃。
二、异常的处理
异常处理是C++处理异常事件的一种机制,异常事件被处理后程序可以正常运行,异常处理的方法由程序
员自己定义。
C++对异常事件的处理会转化为异常表达式的处理,异常表达式是一个携带异常事件信息的表达式。异常
处理表达式的语法如下:
throw e;//抛出异常,当异常事件发生时,用throw语句抛出一个携带异常事件信息的异常表达式。
try {
可能抛出异常事件的代码块;
} catch(类型 异常参数){
异常处理代码块,异常处理方法;
}
语句说明:
1、throw语句
1)throw e;表示抛出异常表达式e,一般在异常表达式发生时抛出异常表达式,相当于报警。其后的语句将不
再执行,相当于跳转,执行语句跳转到相应的catch语句。
2)当throw语句放在try的{}中,表示将异常表达式抛给catch语句
3)throw如果用于catch语句的{}中,则异常表达式被抛给上层函数,相当于转抛
4)如果在try和catch语句之外使用throw语句,表示异常表达式直接抛给上层函数。
2、try...catch语句
1)try用来监测可能发生异常的代码块
2)catch(类型 异常参数),表示捕捉指定类型的异常表达式,其中的异常参数用于接收异常表达式。在此
过程中存在参数的传递。
3)catch(...)可以捕捉到任意类型的异常表达式,通常作为catch的最后一个语句
三、异常的向上传递
没有被try...catch捕捉到的异常将会沿着函数调用顺序自动抛给上层调用函数的try...catch语句,直
到main函数为止。如果main函数也没有捕捉到异常,则程序就会因为异常而终止。
四、自定义类型的异常
五、标准异常
C++标准库定义了一组类,用于报告标准库函数出现的问题。这些异常类可以在用户编
写的程序中使用,如同上述的自定义类型的异常相似。
what成员函数:
所有的标准异常类型都只定义了一个what()成员函数,该函数没有任何参数,返回值是
一个指向C风格的字符串的“const char*”,该字符串的目的是提供关于异常的一些文本信息。
what()函数返回的C风格字符串的内容与异常对象的类型无关,如果异常类型有一个字
符串初始值,则what()返回该字符串。对于无初始值的异常类型来说,what()返回的内容
有编译器决定。