Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

5.5.1 调用者处理错误

先看看第一种方法(“让用户意识到问题”)。如果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()中用一个命名常量代替具体的数值: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252