Java中的最好的一件事情是彻底的使用异常并依存异常。使用异常你可以在句柄操作错误的时候获得一个安全可靠的方法。
不幸地是,大多数的C++类库中,异常不是类的基本部分。为了让C++的异常处理和Java的水平相当,你需要在你的应用程序或者库中小心的设计异常处理。
首先,你需要在你的设计文档中详细的定义出错处理。更多时候,出错处理是一个事后产生的想法。在你开始编写代码之前,你需要为每个函数制定异常规格说明。
一旦你知道你的函数是什么异常,你需要定义一个层次。注意,和Java不一样的是,任何在throw语句中都可以被thrown。但是使用基本的数据类型不允许任何分层次的扑捉结构,并且,我反对使用它们。
如果你使用一个类库,这个类库有自己的异常层次,你可以从那里开始。但是,通常你希望添加你自己的异常到层次中,如果你使用一个标准C++编译器,你可以从标准库中开始异常。
记住你通常catch一个异常并throw另外一个,因此,异常连锁是有益的。添加异常连锁和添加一个构造函数一样简单。它将使用异常的基本类。
混合异常和C的类型返回值错误是一个好的办法。如果可以的话,提炼C错误报告函数和你程序的其余部分的接口
C++异常规格有一个普通的语法:
//Declaration
void foo() throw (IOException);
//definition
void foo() throw (IOException){
//do something
}
注意,声明和定义必须有同样的异常规格。不幸地是,C++异常规格和Java的异常规格不一样。C++版本的进程中的std::unexpected异常代替了Java中的编译错误。同样的C++异常规格默认throw任何异常。