异常说明

本用不上。

任何抽象方法的类。如果你要从一个非接口的类继承,那么你只能ม从一个ฐ这样的类中去继

在一个导出类中,强制要求你必须有一个ฐ基类,它要么是抽象的,要么是“具体的”没有

voiddispo色{

}

charc;

bຘooleant;

一般说来,如果在一个ฐ程序里使用了“直接常量”literal,编译器可以准确地知道要生成

直接常量literal

维护文档的费用。

所占的成本比例极大。如果程序易于理解,那么เ它必定易于维护。同时,这也降低了创建和

prenticehaທll恰当的地点和恰当的时间出现,他将责任转交给paul之前,为这些书奠定

我的前两本书๰在osbຘornemcນgra9๗-hill出版时,jeffpepper是编辑。jeff总是在

里用打印栈轨迹staທcktrace的方法来“修补”这个问题本章中ณ的很多例子还是使

用了这个方แ法,看起来还是比较合适的。虽然这样可以跟踪异常的行为,但是你仍旧

不知道该如何处理异常。这一节,我们来研究一下“被检查的异常”及其并症,以及

采用什么เ方法来解决这些问题。

这个话题看起来简单,但实际上它不仅复杂,更重要的是还非常多变。总有人会顽ื固地

坚持自己้的立场,声称正确也是他们的答案是显而易见的。我觉得之ใ所以会有这种

观点,是因为ฦ我们使用的工具已๐经不是“ansi标准出台前๩的cນ那ว样的”弱类型语言

poorly-typed浪uage,而是像cນ++和javaທ这样的“强静态类型语言”strong

staທti9guaທge,也就是编译时就做类型检查的语言,这是前者无຀法比拟

的。当你刚开始这个ฐ转变的时候就像我一样,会现它带来的好处是那样的明显,

好像强类型检查总能解决所有的问题。在此,我想结合我自己้的认识过程,告诉你我是

怎样从对类型检查的绝对迷信变成怀疑的;当然,很多时候它还是非常有用的,但是当

它挡住我们的去路并成为障碍的时候,我们就得跨过去。只是这条界限往往并不是很清

晰。我最喜欢的一句格言是:“所有模型都是错误的。但有些是能用的。”

历史

异常处理起源于pl1和mesaທ之类的系统中,后来又出现在cນlu,smaທlltaທlk,

摸dula-3,aທda,eiffel,9,java以及jaທvaທ后面的ruby和c#中。jaທva

的设计和c++很相似,只是javaທ的设计者去掉了一些他们认为cນ++设计得不好的东西。

为ฦ了能ม向程序员一个他们更愿意使用的错误处理和恢复的框架,异常处理机制很晚

才被加入c++标准化过程中ณ,这个倡议是由á9est肉strup所起的。

cນ++的异常模型主要借鉴了clu的作法。然而,当时其他语言已经支持异常处理了:包

括ada,smalltalk两者都有异常处理,但是都没有异常说明,以及摸dulaທ-3它

既ຂ有异常处理也有异常说明。

liov和snyder在他们有关异常的开创性论文

5

中指出,用9๗t

faທshion报告错误的语言有一个主ว要缺陷,就是:

“…每次调用的时候都必须执行条件测试,以确定会产生何种结果。这使程序难以阅读,

并且有可能降低运行效率,因此程序员们既不愿意指出,也不愿意处理意外情况。”

5

baທrbaraliov和alansnyder:9dlingin9sonsoft9are

engineering,ไvol色-ๅ5,no6,1้979๗年11月。这篇论文在网上是找不到的,只有印刷版本,所以你得去图

书馆找一个副本。

注意,异常处理的初衷是要消除这种限制,但是我们又从jaທva的“被检查的异常”上

看到了这种代码。他们继续写道:

“…在调用会引异常的函数的同时,还要求程序员给出异常处理程序,这会降低程序

的可读性,使得程序的正常思路被异常处理给破坏了。”

c++ใ异常的设计参考了clu方แ式。st肉strup声称其目标是减少恢复错误所需的代码。

我想他这话是说给那ว些“通常情况下都不写c的错误处理”的程序员们听的,因为要把

那么多代码放到那ว么多地方แ实在不是什么เ好差事。所以他们写cນ程序的习๤惯是,忽略所

有的错误,然后使用调试器来跟踪错误。这些程序员知道,使用异常就意味着他们要写