C语言里面的错误处理使用不同的数值表示不同类型的错误,传统的错误处理方法存在很大缺点:其表达能力有限;状态编码与错误码难以形成统一标准,例如同样用途的程序库,不同的开发商可能采用不同的错误编码方案来标识不同类型错误;有些函数没有返回值(例如构造函数和析构函数)等等。
C++异常处理机制将异常类型化,显然一个类型比一个数字包含的信息量大得多。C++保证,如果一个异常在抛出点没有得到处理,那么它将一直被抛向上层调用者,直至main函数,指导找到一个类型匹配的异常处理器,否则调用terminate结束程序。可以看出:异常处理机制实际上是一种运行时通知机制。
任何类型都可以当做异常类型,异常仅仅通过类型而不是通过值来匹配的。所以下面这段代码是OK的,只是我们一般不使用基本数据类型的对象作为异常。
try{
if(..) throw 0;
}
catch(int){
cerr << "exception!" << endl;
}
try{
if(..) throw "error msg";
}
catch(const char *){
cerr << "exception!" << endl;
}