1.6 标准异常
读者也可以使用标准C++库中定义的异常。一般来说,使用标准异常类比用户自己定义异常类要方便快捷得多。如果标准类不能满足要求,也可以把它们作为基类来派生出自己的异常类。
所有的标准异常类归根结底都是从exception类派生的,exception类的定义在头文件<exception>中。exception类的两个主要派生类为logic_error和runtime_error,这两个类的定义在头文件<stdexcept>中(这个头文件包含<exception>)。logic_error类用于描述程序中出现的逻辑错误,例如传递无效的参数。运行时错误(runtime_error)是指那些无法预料的事件所造成的错误,例如硬件故障或内存耗尽。logic_error和runtime_error都提供了一个参数类型为std:string的构造函数,这样就可以将消息保存在这两种类型的异常对象中,通过exception:what()函数,读者可以从对象中得到它所保存的消息,如下面程序所示:
尽管runtime_error的构造函数把消息保存在它的std:exception子对象中,但是std:exception并没有提供一个参数类型为std:string的构造函数。用户最好从runtime_error类或logic_error类(或这两个类中某个类的派生类)来派生自己的异常类,而不要直接从std:exception类派生。
下面的几个表格描述了标准异常类:
输入输出流异常类ios:failure也是从exception派生的,但是它没有子类。
读者可以直接使用下面两个表中所列的异常类,或者把它们作为基类来派生自己的更加具体的异常类。