August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
下面是函数area()带异常处理的版本:
如果参数正确,我们会返回计算的面积;否则结束函数area(),并抛出异常,希望这个异常能够被捕获并做出相应错误处理。Bad_area是一个我们定义的新类型。它的目的是作为函数area()中异常的标识,以便被捕获时能够确认异常来自哪里。用户自定义类型(类和枚举)将在第9章讨论。需要注意的是Bad_area{}表示“创建一个Bad_area类型的缺省值对象”。因此throw Bad_area{}表示“创建一个Bad_area类型的对象并抛出它”。
现在我们可以这样写:
首先要注意的是,上面的错误处理针对的是所有对area()的调用,包括主函数里的一次调用和两个通过framed_area()的间接调用。其次,很明显,如何处理错误与检测错误是分离的:main()不知道哪个函数做了throw Bad_area{}动作,area()不知道哪个函数会捕捉它所抛出的Bad_area异常。对于使用了许多库的大程序来说,这一分离非常重要。因为在编程时没有人希望同时对应用程序和库代码进行修改,所以没有人能够“通过在正确位置简单增加几行代码来修正错误”。