August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
先看看第一种方法(“让用户意识到问题”)。如果area()是一个由我们不能修改的库提供的函数,那么我们将选择这种方法。不论好坏,这都是一个合适的选择。
在main()函数中保护area(x,y)的调用是很容易的:
事实上,当你发现一个错误后,唯一的问题就是如何解决它。这里我们调用了一个函数error()。它能够做一些错误处理工作。实际上,在std_lib_facilities.h中我们提供了一个error()函数。它能够终止程序运行并将字符串参数作为系统错误信息输出。如果你希望输出自己的错误信息并做其他的操作,参看runtime_error(5.6.2节,7.3节,7.8节和附录B.2.1)。对于初学者来说,这已经足够了。它还可以作为更复杂错误处理的实例。
如果我们不需要明确区分每一个参数,我们还可以简化程序如下:
为了对area()的参数实现完全保护,我们需要使用framed_area()函数,程序改写为:
这看上去有些混乱,而且还存在一些基本问题。上面的程序只有在我们确切了解framed_area()如何使用area()的情况下才是正确的。我们要知道framed_area()对每一个参数都减了2。我们不得不了解这么多细节情况。如果有人把framed_area()修改为减1而不是2,我们又该怎么办呢?如果这种情况发生的话,我们不得不查找程序中的每一个framed_area()调用,并做相应的修改。这被称为“易碎”代码,应为它很容易被破坏。这也是一个“魔术常量”的例子(4.3.1节)。为了减少程序的“易碎性”,我们可以在framed_area()中用一个命名常量代替具体的数值: ...