举个例子,
比如你在写一个脚本解析器,你编译脚本过程中检查脚本是否有语法错误。但是你的检
查机制可能在很多初。如果你每次检查到语法错误的时候仅仅是打印下错误信息,这个
显然不行,因为你可能不需要打印信息而是要返回具体的错误描述,要写到日志里。如
果仅仅是return,这个也不行,你在你的解析器里return,外面也不知道。如果是传统
方法的话,一般可以写到一个全局的错误收集器里,可以通过GetLastError之类的函数
来获取上一次出错的错误编号和具体内容。这个是传统做法。
如果使用exception机制,查到错误时直接抛出异常。你抛出异常,可以由不同的地方
catch。catch后可以随意处理,可以跳过,也可以直接警告输出个消息,也可以崩溃。
比如上面的例子:
try{
script_parser.parse(script);
}catch(XXXScriptExcept& e){
printf(e.what());
}
传统做法的代码是:
int err = script_parser.parse(script);
if(err!=0){
printf(GetErrorDesc(err));
}
异常处理这种方法一般显得优雅一点,结构更好,更OO。底层处理的时候,可以完全不
关心怎么解决异常,而交给用户去解决,这样可以把功能实现和异常处理分离开来。但
是相对来说效率更低,而且存在函数多个出口,对调试有不便的地方。
传统方法也是完全可以取代OO的异常处理的。而且效率更高。更多时候看你如何取舍。
据我所知,有些软件是禁止用异常处理机制的。有些则比较鼓励使用。