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 关于 错误如何变成异常 关键点是什么是一种意外情况
如果该库希望用在不会崩溃的程序里(好像通讯系统都不希望自己崩溃),那么该库就必须自己处理问题,如果自己不能处理,则通知库的使用者来处理。
这个好像当前系统都是这么做的。