内容简介
《C++程序设计语言》(原书第4版)是C++领域经典的参考书,介绍了C++11的各项新特性和新功能。全书共分四部分。部分(第1~5章)是引言,包括C++的背景知识,C++语言及其标准库的简要介绍;第二部分(第6~15章)介绍C++的内置类型和基本特性,以及如何用它们构造程序;第三部分(第16~29章)介绍C++的抽象机制及如何用这些机制编写面向对象程序和泛型程序;第四部分(第30~44章)概述标准库并讨论一些兼容性问题。由于篇幅问题,原书中文版分两册出版,分别对应原书的至三部分和第四部分。这一册为至三部分。
目录
The C++ Programming Language, Fourth Edition
出版者的话
译者序
前言
第3版前言
第2版前言
第1版前言
第一部分 引言
第1章 致读者 2
1.1 本书结构 2
1.1.1 引言 2
1.1.2 基本特性 3
1.1.3 抽象机制 4
1.1.4 标准库 5
1.1.5 例子和参考文献 5
1.2 C++的设计 7
1.2.1 程序设计风格 8
1.2.2 类型检查 11
1.2.3 C兼容性 12
1.2.4 语言、库和系统 12
1.3 学习C++ 14
1.3.1 用C++编程 15
1.3.2 对C++程序员的建议 16
1.3.3 对C程序员的建议 16
1.3.4 对Java程序员的建议 17
1.4 C++的历史 18
1.4.1 大事年表 19
1.4.2 早期的C++ 19
1.4.3 1998标准 21
1.4.4 2011标准 23
1.4.5 C++的用途 26
1.5 建议 27
1.6 参考文献 28
第2章 C++概览:基础知识 32
2.1 引言 32
2.2 基本概念 33
2.2.1 Hello,World! 33
2.2.2 类型、变量和算术运算 34
2.2.3 常量 36
2.2.4 检验和循环 37
2.2.5 指针、数组和循环 38
2.3 用户自定义类型 40
2.3.1 结构 41
2.3.2 类 42
2.3.3 枚举 43
2.4 模块化 44
2.4.1 分离编译 45
2.4.2 名字空间 46
2.4.3 错误处理 47
2.5 附记 50
2.6 建议 50
第3章 C++概览:抽象机制 51
3.1 引言 51
3.2 类 51
3.2.1 具体类型 52
3.2.2 抽象类型 56
3.2.3 虚函数 58
3.2.4 类层次 59
3.3 拷贝和移动 62
3.3.1 拷贝容器 63
3.3.2 移动容器 64
3.3.3 资源管理 66
3.3.4 抑制操作 66
3.4 模板 67
3.4.1 参数化类型 67
3.4.2 函数模板 69
3.4.3 函数对象 69
3.4.4 可变参数模板 71
3.4.5 别名 72
3.5 建议 73
第4章 C++概览:容器与算法 74
4.1 标准库 74
4.1.1 标准库概述 75
4.1.2 标准库头文件与名字空间 75
4.2 字符串 77
4.3 I/O流 78
4.3.1 输出 78
4.3.2 输入 79
4.3.3 用户自定义类型的I/O 80
4.4 容器 81
4.4.1 vector 81
4.4.2 list 84
4.4.3 map 85
4.4.4 unordered_map 86
4.4.5 容器概述 86
4.5 算法 87
4.5.1 使用迭代器 88
4.5.2 迭代器类型 90
4.5.3 流迭代器 91
4.5.4 谓词 93
4.5.5 算法概述 93
4.5.6 容器算法 94
4.6 建议 94
第5章 C++概览:并发与实用功能 96
5.1 引言 96
5.2 资源管理 96
5.2.1 unique_ptr与shared_ptr 97
5.3 并发 99
5.3.1 任务和thread 99
5.3.2 传递参数 100
5.3.3 返回结果 100
5.3.4 共享数据 101
5.3.5 任务通信 103
5.4 小工具组件 106
5.4.1 时间 106
5.4.2 类型函数 107
5.4.3 pair和tuple 109
5.5 正则表达式 110
5.6 数学计算 111
5.6.1 数学函数和算法 111
5.6.2 复数 111
5.6.3 随机数 112
5.6.4 向量算术 113
5.6.5 数值限制 113
5.7 建议 114
第二部分 基本功能
第6章 类型与声明 116
6.1 ISO C++标准 116
6.1.1 实现 117
6.1.2 基本源程序字符集 118
6.2 类型 118
6.2.1 基本类型 119
6.2.2 布尔值 119
6.2.3 字符类型 121
6.2.4 整数类型 124
6.2.5 浮点数类型 126
6.2.6 前缀和后缀 127
6.2.7 void 128
6.2.8 类型尺寸 128
6.2.9 对齐 130
6.3 声明 131
6.3.1 声明的结构 133
6.3.2 声明多个名字 134
6.3.3 名字 134
6.3.4 作用域 136
6.3.5 初始化 138
6.3.6 推断类型:auto和decltype() 141
6.4 对象和值 144
6.4.1 左值和右值 144
6.4.2 对象的生命周期 145
6.5 类型别名 146
6.6 建议 147
第7章 指针、数组与引用 148
7.1 引言 148
7.2 指针 148
7.2.1 void* 149
7.2.2 nullptr 150
7.3 数组 150
7.3.1 数组的初始化器 152
7.3.2 字符串字面值常量 152
7.4 数组中的指针 155
7.4.1 数组漫游 156
7.4.2 多维数组 158
7.4.3 传递数组 159
7.5 指针与const 161
7.6 指针与所有权 163
7.7 引用 163
7.7.1 左值引用 164
7.7.2 右值引用 167
7.7.3 引用的引用 169
7.7.4 指针与引用 170
7.8 建议 172
第8章 结构、联合与枚举 173
8.1 引言 173
8.2 结构 173
8.2.1 struct的布局 175
8.2.2 struct的名字 176
8.2.3 结构与类 177
8.2.4 结构与数组 178
8.2.5 类型等价 180
8.2.6 普通旧数据 180
8.2.7 域 182
8.3 联合 183
8.3.1 联合与类 185
8.3.2 匿名union 186
8.4 枚举 188
8.4.1 enum class 188
8.4.2 普通的enum 191
8.4.3 未命名的enum 192
8.5 建议 193
第9章 语句 194
9.1 引言 194
9.2 语句概述 194
9.3 声明作为语句 195
9.4 选择语句 196
9.4.1 if语句 196
9.4.2 switch语句 198
9.4.3 条件中的声明 200
9.5 循环语句 201
9.5.1 范围for语句 201
9.5.2 for语句 202
9.5.3 while语句 203
9.5.4 do语句 203
9.5.5 退出循环 204
9.6 goto语句 204
9.7 注释与缩进 205
9.8 建议 207
第10章 表达式 208
10.1 引言 208
10.2 一个桌面计算器示例 208
10.2.1 分析器 209
10.2.2 输入 213
10.2.3 底层输入 216
10.2.4 错误处理 217
10.2.5 驱动程序 217
10.2.6 头文件 218
10.2.7 命令行参数 218
10.2.8 关于风格 220
10.3 运算符概述 220
10.3.1 结果 224
10.3.2 求值顺序 224
10.3.3 运算符优先级 225
10.3.4 临时对象 226
10.4 常量表达式 227
10.4.1 符号化常量 229
10.4.2 常量表达式中的const 229
10.4.3 字面值常量类型 229
10.4.4 引用参数 230
10.4.5 地址常量表达式 231
10.5 隐式类型转换 231
10.5.1 提升 231
10.5.2 类型转换 232
10.5.3 常用的算术类型转换 234
10.6 建议 235
第11章 选择适当的操作 236
11.1 其他运算符 236
11.1.1 逻辑运算符 236
11.1.2 位逻辑运算符 236
11.1.3 条件表达式 238
11.1.4 递增与递减 238
11.2 自由存储 240
11.2.1 内存管理 241
11.2.2 数组 243
11.2.3 获取内存空间 244
11.2.4 重载new 245
11.3 列表 247
11.3.1 实现模型 248
11.3.2 限定列表 249
11.3.3 未限定列表 249
11.4 lambda表达式 251
11.4.1 实现模型 251
11.4.2 lambda的替代品 252
11.4.3 捕获 254
11.4.4 调用与返回 257
11.4.5 lambda的类型 257
11.5 显式类型转换 258
11.5.1 构造 259
11.5.2 命名转换 261
11.5.3 C风格的转换 262
11.5.4 函数形式的转换 262
11.6 建议 263
第12章 函数 264
12.1 函数声明 264
12.1.1 为什么使用函数 265
12.1.2 函数声明的组成要件 265
前言/序言
The C++ Programming Language, Fourth Edition所有计算机科学问题,都可以通过引入一个新的间接层次来解决,那些已有过多间接层次的问题除外。
——David J. Wheeler与C++98标准相比,C++11标准让我可以更清晰、更简洁而且更直接地表达自己的想法。而且,新版本的编译器可以对程序进行更好的检查并生成更快的目标程序。因此,C++11给人的感觉就像是一种新语言一样。
在本书中,我追求完整性(completeness)。我会介绍专业程序员可能需要的每个语言特性和标准库组件。对每个特性或组件,我将给出:
基本原理:设计这个特性(组件)是为了帮助解决哪类问题?其设计原理是什么?它有什么根本的局限?规范:它该如何定义?我将以专业程序员为目标读者来选择内容的详略程度,对于要求更高的C++语言研究者,有很多ISO标准的文献可供查阅。
例子:当单独使用这个特性或与其他特性组合使用时,如何用好它?其中的关键技术和习惯用法是怎样的?在程序的可维护性和性能方面是否有一些隐含的问题?多年来,无论是C++语言本身还是它的使用,都已经发生了巨大改变。从程序员的角度,大多数改变都属于语言的改进。与之前的版本相比,当前的ISO C++标准(ISO/IEC 14882-2011,通常称为C++11)在编写高质量代码方面无疑是一个好得多的工具。但是它好在哪里?现代C++语言支持什么样的程序设计风格和技术?这些技术靠哪些语言特性和标准库特性来支撑?精练、正确、可维护性好、性能高的C++代码的基本构建单元是怎样的?本书将回答这些关键问题。很多答案已经不同于1985、1995或2005等旧版本的C++语言了:C++在进步。
C++是一种通用程序设计语言,它强调富类型、轻量级抽象的设计和使用。C++特别适合开发资源受限的应用,例如可在软件基础设施中发现的那些应用。那些花费时间学习高质量代码编写技术的程序员将会从C++语言受益良多。C++是为那些严肃对待编程的人而设计的。人类文明已经严重依赖软件,编写高质量的软件非常重要。
目前已经部署的C++代码达到数十亿行,因此程序稳定性备受重视——很多1985年和1995年编写的C++代码仍然运行良好,而且还会继续运行几十年。但是,对所有这些应用程序,都可以用现代C++语言写出更好的版本;如果你墨守成规,将来写出的代码将会是低质量、低性能的。对稳定性的强调还意味着,你现在遵循标准写出的代码,在未来几十年中会运行良好。本书中所有代码都遵循2011 ISO C++标准。
本书面向三类读者:
想知道新的ISO C++标准都提供了哪些新特性的C++程序员。
好奇C++到底提供了哪些C语言的特性的C程序员。
具备Java、C#、Python和Ruby等编程语言背景,正在探寻“更接近机器”的语言,即更灵活、提供更好的编译时检查或是更好性能的语言的程序员。
自然,这三类读者可能是有交集的——一个专业软件开发者通常掌握多门编程语言。
本书假定目标读者是程序员。如果你想问“什么是for循环?”或是“什么是编译器?”,那么本书现在还不适合你,我向你推荐我的另一本书《C++程序设计原理与实践》,这本书适合作为程序设计和C++语言的入门书籍。而且,我假定读者是较为成熟的软件开发者。如果你的问题是“为什么要费力进行测试?”或者认为“所有语言基本都是一样的,给我看语法就可以了”,甚至确信存在一种适合所有任务的完美语言,那么本书也不适合你。
相对于C++98,C++11提出了哪些改进和新特性呢?适合现代计算机的机器模型会涉及大量并发处理。为此,C++11提供了用于系统级并行编程(如使用多核)的语言和标准库特性。C++11还提供了正则表达式处理、资源管理指针、随机数、改进的容器(包括哈希表)以及其他很多特性。此外,C++11还提供了通用和一致的初始化机制、更简单的for语句、移动语义、基础的Unicode支持、lambda表达式、通用常量表达式、控制类缺省定义的能力、可变参数模板、用户定义的字面值常量和其他很多新特性。请记住,这些标准库和语言特性的目标就是支撑那些用来开发高质量软件的程序设计技术。这些特性应该组合使用——将它们看作盖大楼的砖,而不应该相互隔离地单独使用来解决特定问题。计算机是一种通用机器,而C++在其中起着重要作用。特别是,C++的设计目标就是足够灵活和通用,以便处理那些连它的设计者都未曾想象过的未来难题。
致谢除了本书上一版致谢提及的人之外,我还要感谢Pete Becker、Hans-J. Boehm、Marshall Clow、Jonathan Coe、Lawrence Crowl、Walter Daugherty、J. Daniel Garcia、Robert Harle、Greg Hickman、Howard Hinnant、Brian Kernighan、Daniel Krügler、Nevin Liber、Michel Michaud、Gary Powell、Jan Christiaan van Winkel和Leor Zolman。没有他们的帮助,本书的质量要差得多。
感谢Howard Hinnant为我解答很多有关标准库的问题。
Andrew Sutton是Origin库的作者,模板相关章节中很多模拟概念的讨论都是基于这个测试平台的。他还是Matrix库的作者,这是第29章的主题。Origin库是开源的,在互联网上搜索“Origin”和“Andrew Sutton”就能找到。
感谢我指导的毕业设计班,他们从部分中找出的问题比其他任何人都多。
假如我能遵照审阅人的所有建议,毫无疑问会大幅度提高本书的质量,但篇幅上也会增加数百页。每个专家审阅人都建议增加技术细节、进阶示例和很多有用的开发规范;每个新手审阅人(或教育工作者)都建议增加示例;而大多数审阅人都(正确地)注意到本书的篇幅可能过长了。
感谢普林斯顿大学计算机科学系,特别感谢Brian Kernighan教授,在我利用部分休假时间撰写此书时给予我热情接待。
感谢剑桥大学计算机实验室,特别感谢Andy Hopper教授,在我利用部分休假时间撰写此书时给予我热情接待。
感谢我的编辑Peter Gordon以及他在Addison-Wesley的出版团队,感谢你们的帮助和耐心。
Bjarne Stroustrup于得克萨斯大学城第3版前言The C++ Programming Language, Fourth Edition去编程就是去理解。
——Kristen Nygaard我觉得用C++编程比以往更令人愉快。在过去这些年里,C++在支持设计和编程方面取得了令人振奋的进步,针对其使用的大量新技术已经被开发出来了。然而,C++并不只是好玩。普通的程序员在几乎所有种类和规模的开发项目上,在生产率、可维护性、灵活性和质量方面都取得了显著的进步。到今天为止,C++已经实现了我当初期望中的绝大部分,还在许多我原来根本没有梦想过的工作中取得了成功。
本书介绍的是标准C++以及由C++所支持的关键编程技术和设计技术。与本书第1版所介绍的那个C++版本相比,标准C++是一个经过了更仔细推敲的更强大的语言。各种新的语言特征,如名字空间、异常、模板,以及运行时类型识别,使人能以比过去更直接的方式使用许多技术,标准库使程序员能够从比基本语言高得多的层面上起步。
本书第2版中大约有三分之一的内容来自第1版。第3版则重写了更大的篇幅。它提供的许多东西是大部分有经验的程序员也需要的,与此同时,本书也比它的以前版本更容易让新手入门。C++使用的爆炸性增长和由此带来的海量经验积累使这些成为可
C++程序设计语言(第1-3部分)(原书第4版) epub pdf mobi txt 电子书 下载 2024
C++程序设计语言(第1-3部分)(原书第4版) 下载 epub mobi pdf txt 电子书 2024