Cpp Primer CH11 异常处理

1 C++异常类型通常用类(class)实现。

 

2 捕获异常

try

{

    throut (YYY)

}catch(XXX) { }

其中catch内容可能是:

2.11 单个异常类类型, 对应的YYY是类型名

2.2 单个对象声明,对应的应该是XXX类型的某个对象

2.3  .... 表示能捕获所有的可能异常。

 

3 捕获异常

C++的异常处理是不可恢复的:一旦异常被处理,就不可以在抛出异常的地缝继续处理

 

 4 异常对象

如果异常处理需要处理异常中报错的数据,就必须使用上述2.2方式抛出:

异常对象总是在抛出点被创建的,异常抛出语句同异常处理语句类似与函数调用的方式:

try

{

    classA exp;

...

    throw exp;

}catch (classA e)

{

   e.xxx();

}

对象e使用exp进行初始化,当然也可以使用引用的方式,比如 catch (Class & e);

 

5  异常栈展开

如果当前层次的函数没有catch到这个异常,则查找上一个层次的catch,这个过程叫做栈展开。

 

6 重新抛出

如果当前catch 不能完全处理该异常,需要再次调用throw,向上一层次调用栈重新抛出。

 

7 异常规范

1 异常声明

 class  iStack{

  void pop(int &value) throw(popOnEmpty);

  void push(int value) throw(pushonfull);

}

表明pop不会抛出除了声明的之外的任何异常。

void pop(int &value) throw()表明不会抛出任何异常

void pop(int &value) ;表明可能会抛出任何异常

 

2 异常规范声明的事接口的一部分,同函数类型强绑定

3异常声明错误可能只在运行时发现,比如抛出一个不被允许的异常,编译器不会察觉。所以具有一定危险。

 

8 关于 错误如何变成异常    关键点是什么是一种意外情况

如果该库希望用在不会崩溃的程序里(好像通讯系统都不希望自己崩溃),那么该库就必须自己处理问题,如果自己不能处理,则通知库的使用者来处理。

这个好像当前系统都是这么做的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值