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版)

14.4.2 坦白:使用宏

与我们的vector类似,大多数标准库vector实现不对下标运算符([])进行范围检查,但在at()中提供范围检查。那么我们程序中的std::out_of_range异常是从何而来呢?本质上,我们选择了14.4.1节中的“选项4”:vector的实现不必对[]进行范围检查,但这么做也是允许的,因此我们的代码处理了这种情况。你使用的是我们的调试版本Vector,它对[]进行了范围检查。这是我们开发代码过程中采用的版本。虽然这一版本会牺牲小部分程序性能,但它有助于减少程序错误和调试时间:

通过使用Range_error,我们能够对元素的越界索引进行调试。由于派生自std::vector,因此Vector获得了vector的所有成员函数。第一个using为std::vector的size_type引入了一个便利的别名;参见15.5节。第二个using将vector的所有构造函数都引入了Vector。

在调试复杂程序时这个Vector版本是十分有用的。另一种替代方法是使用带系统的范围检查的完整标准库vector实现——实际上,这可能就是你之前所做的;我们不可能准确地知道你的编译器和库提供了什么程度的范围检查(可能会超出C++标准的要求)。

在std_lib_facilities.h中,我们采用了一种糟糕的花招(宏替换),重新定义vector使之代表Vector:

这意味着每当你写下vector时,编译器看到的都会是Vector。这种花招很糟糕,因为你所看到的代码与编译器所见的代码并不相同。在实际代码中,宏是晦涩错误的一个重要来源(参见27.8节和附录A.17)。 ...

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