《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