Posted on 2007-11-26 21:57
lymons 阅读(1545)
评论(0) 编辑 收藏 引用 所属分类:
C++
13.16 标准库异常层次
经验表明,异常是可以分类的。C++草案标准提供了标准库异常层次。这个层次以基类excephon开始(在头文件<exception>中定义),该基类提供服务what(),在每个派生类中重定义,发出相应的错误消息。
从基类exception可以派生直接派生类runtime_error和Iogic_error(都在头文件<stdexcept>中定义),每个派生类又可以派生其他类。
从exception中还可以派生由于C++语言特性而抛出的异常,例如,new抛出bad_alloc(13.14节).dynamic_cast抛出bad_cast(第 2l章),typeid抛出bad_typeid(第21章)。如果发生意外异常时,通过在函数的抛出表中加上std::bad_exeeption, unexpected()抛出bad_exception而不是(默认)终止程序或调用set_unexpected指定的另一函数。
logic_error类是几个标准异常类的基类,表示程序逻辑中的错误,可以通过编写正确的代码来防止。下面介绍其中的一些类。 invalid_argument类表示向函数传入无效参数(可以通过编写正确的代码来防止)。length_error类表示长度大于所操作对象允许的最大长度(第19章处理string时会抛出length_error异常)。out_of_range类表示数组和string下标之粪的值超界。
runtime_error类是几个其他异常类的基类,表示程序中只能在执行时发现的错误。overflow_error类表示发生运算上溢错误;underflow_error类表示发生运算下溢错误。
标准库异常类
C++标准库异常类定义在四个头文件中:
1) <exception>头文件中定义了异常类exception;
2) <stdexcept>头文件中定义了几种常见的异常类。
3) <new>头文件中定义了bad-alloc异常类。当new无法分配内存时将抛出该异常类对象。
4) <type_info>头文件中定义了bad_cast异常类。当dynamic_cast失败时将抛出该异常类对象。
标准异常类之间的关系:exception派生出runtime_error类、logic_error类、bad_cast类和bad_alloc类。由runtime_error派生出 range_error、overflow_error、underflow_error;由logic_error派生出domain_error、 invalid_argument、length_error、out_of_range。