c++标准异常类别

语言本身或标准程序库所抛出的所有异常,都派生自基类exception。所有这些标准异常可分为三组:(1)语言本身支持的异常;(2)c++标准程序库发出的异常;(3)程序作用域(scope of a program)之外发生的异常。

 

1. 语言本身支持的异常

此类异常用以支撑某些语言特性。

(1)new操作失败,会抛出bad_alloc异常(new的nothrow版本另当别论)。

(2)执行期间,当一个作用于reference身上的“动态型别转换操作”失败时,dynamic_cast会抛出bad_cast异常。

(3)执行期型别辨识(RTTI)过程中,如果交给typeid的参数为零或空指针,typeid操作符会抛出bad_typeid异常。

(4)如果发生非预期的异常(函数抛出异常规格(exception specification)以外的异常),bad_exception异常会接手处理,bad_exception会调用unexpected(),后者通常会唤起terminate()终止程序。

class E1;
class E2; // not derived from E1
void f() throw(E1) // throws only exceptions of type E1
{
  …
  throw E1(); // throws exception of type E1
throw E2(); // calls unexpected(), which calls terminate()
}

如果异常规格罗列了bad_exception,那么任何未列于规格的异常,都将在函数unexpected()中重新抛出(rethrows)bad_exception。

2. c++标准程序库发出的异常

c++标准程序库异常总是派生自logic_error。

(1)invalid_argument表示无效参数,例如将bitset(array of bits)以char而非“0”或“1”进行初始化。

(2)length_error指出某个行为“可能超越了最大极限”,例如对某个字符串附加太多字符。

(3)out_of_range指出参数值“不在预期范围内”,例如在处理容器或string中采用一个错误索引。

(4)domain_error指出专业领域范畴内的错误。

此外,标准程序库的IO部分提供一个名为ios_base::failure的特殊异常,当数据流由于错误或者到达文件末尾而发生状态改变时,就可能抛出这个异常。

3. 程序作用域(scope of a program)之外发生的异常

派生自runtime_error的异常,用来指出“不在程序范围内,且不容易回避”的事件。c++标准程序库针对执行期错误提供以下三个class:

(1)range_error指出内部计算时发生区间错误。

(2)overflow_error指出算术运算发生上溢位。

(3)underflow_error指出算术运算发生下溢位。

基础类别exception和badexception定义于<exception>。bad_alloc定义于<new>。bad_cast和bad_typeid定义于<typeinfo>。ios_base::failure定义于<ios>。其他异常类别定义于<stdexcept>。

【学习资料】 《c++标准程序库》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值