Skip to Content
C++语言导学(原书第2版)
book

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

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
Pearson
Content preview from C++语言导学(原书第2版)

3.5.2 不变式

使用异常报告越界访问错误是一个典型的函数检查其实参的例子,因为基本假设,即所谓的前置条件(precondition)没有满足,函数拒绝执行。如果我们正式说明Vector的下标运算符,我们将定义类似于“索引必须在[0:size())范围内”的规则,而这正是在operator[]()中要检查的。符号[a:b)指定了一个半开区间,表示a是区间的一部分,而b不是。每当定义一个函数时,就应考虑它的前置条件是什么以及如何检验它(参见3.5.3节)。对大多数应用来说,检验简单的不变式是一个好主意,参见3.5.4节。

但是,operator[]()对Vector类型的对象进行操作,而且只在Vector的成员有“合理”的值时才有意义。特别是,我们说过“elem指向一个含有sz个double的数组”,但这只是注释中的说明而已。对于类来说,这样一条关于假设某事为真的声明称为类不变式(class invariant),简称为不变式(invariant)。建立类的不变式是构造函数的任务(从而成员函数可以依赖该不变式),成员函数的责任是确保当它们退出时不变式仍然成立。不幸的是,我们的Vector构造函数只履行了一部分职责。它正确地初始化了Vector成员,但是没有检验传入的实参是否有效。考虑如下情况:

这条语句很可能会引起混乱。

下面是一个更好的定义:

本书使用标准库异常length_error报告元素数目为非正数的错误,因为一些标准库操作也是用这个异常报告这种错误。如果new运算符找不到可分配的内存,那么就会抛出std::bad_alloc。可以编写如下代码: ...

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.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

软件开发实践:项目驱动式的Java开发指南

软件开发实践:项目驱动式的Java开发指南

Raoul-Gabriel Urma, Richard Warburton
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Python机器学习案例精解

Python机器学习案例精解

Posts & Telecom Press, Yuxi (Hayden) Liu

Publisher Resources

ISBN: 9787111633280