第0章 致读者1
第1部分
第1章 C++的史前时代17
1.1 Simula和分布式系统17
1.2 C与系统程序设计19
1.3 一般性的背景20
第2章 C with Classes23
2.1 C with Classes的诞生23
2.2 特征概览25
2.3 类26
2.4 运行时的效率28
2.5 连接模型30
2.5.1 纯朴的实现32
2.5.2 对象连接模型33
2.6 静态类型检查35
2.6.1 窄转换36
2.6.2 警告的使用36
2.7 为什么是C37
2.8 语法问题39
2.8.1 C声明的语法39
2.8.2 结构标志与类型名41
2.8.3 语法的重要性42
2.9 派生类42
2.9.1 没有虚函数时的多态性43
2.9.2 没有模板时的容器类44
2.9.3 对象的布局模型45
2.9.4 回顾46
2.10 保护模型46
2.11 运行时的保证48
2.11.1 构造函数与析构函数49
2.11.2 存储分配和构造函数49
2.11.3 调用函数和返回函数50
2.12 次要特征50
2.12.1 赋值的重载50
2.12.2 默认实参51
2.13 考虑过,但是没有提供的特征52
2.14 工作环境52
第3章 C++的诞生55
3.1 从C with Classes到C++55
3.2 目标57
3.3 Cfront58
3.3.1 生成C59
3.3.2 分析C++60
3.3.3 连接问题61
3.3.4 Cfront发布61
3.4 语言特征63
3.5 虚函数63
3.5.1 对象布局模型66
3.5.2 覆盖和虚函数匹配67
3.5.3 基成员的遮蔽68
3.6 重载68
3.6.1 基本重载70
3.6.2 成员和友元71
3.6.3 运算符函数73
3.6.4 效率和重载73
3.6.5 变化和新运算符75
3.7 引用75
3.8 常量78
3.9 存储管理80
3.10 类型检查81
3.11 次要特征82
3.11.1 注释82
3.11.2 构造函数的记法82
3.11.3 限定83
3.11.4 全局变量的初始化84
3.11.5 声明语句87
3.12 与经典C的关系88
3.13 语言设计工具91
3.14 《C++程序设计语言》(第一版)92
3.15 有关“什么是”的论文93
第4章 C++语言设计规则96
4.1 规则和原理96
4.2 一般性规则97
4.3 设计支持规则100
4.4 语言的技术性规则103
4.5 低级程序设计支持规则106
4.6 最后的话108
第5章 1985—1993年表109
5.1 引言109
5.2 Release 2.0110
5.3 带标注的参考手册(ARM)112
5.4 ANSI和ISO标准化114
第6章 标准化118
6.1 什么是标准118
6.1.1 实现细节119
6.1.2 现实的检查120
6.2 委员会如何运作121
6.3 净化123
6.3.1 查找问题123
6.3.2 临时量的生存期127
6.4 扩充130
6.4.1 评价准则133
6.4.2 状况134
6.4.3 好扩充的问题136
6.4.4 一致性137
6.5 扩充建议实例137
6.5.1 关键词实参137
6.5.2 受限指针141
6.5.3 字符集142
第7章 关注和使用146
7.1 关注和使用的爆炸性增长146
7.1.1 C++市场的缺位147
7.1.2 会议148
7.1.3 杂志和书籍148
7.1.4 编译器149
7.1.5 工具和环境149
7.2 C++的教与学150
7.3 用户和应用156
7.3.1 早期用户156
7.3.2 后来的用户156
7.4 商业竞争157
7.4.1 传统语言158
7.4.2 更新一些的语言158
7.4.3 期望和看法159
第8章 库162
8.1 引言162
8.2 C++库设计162
8.2.1 库设计的折中163
8.2.2 语言特征和库的构造164
8.2.3 处理库的多样性164
8.3 早期的库165
8.3.1 I/O流库166
8.3.2 并行支持168
8.4 其他库171
8.4.1 基础库171
8.4.2 持续性和数据库172
8.4.3 数值库172
8.4.4 专用库172
8.5 一个标准库173
第9章 展望175
9.1 引言175
9.2 回顾176
9.2.1 C++在其预期领域取得了成功吗?176
9.2.2 C++是不是一种统一的语言?177
9.2.3 什么是最大失误?180
9.3 仅仅是一座桥梁吗?180
9.3.1 在一个很长的时期我们还需要这座桥梁180
9.3.2 如果C++是答案,那么问题是什么?181
9.4 什么能使C++更有效184
9.4.1 稳定性和标准184
9.4.2 教育和技术185
9.4.3 系统方面的问题185
9.4.4 在文件和语法之外186
9.4.5 总结187
第2部分
第10章 存储管理189
10.1 引言189
10.2 将存储分配和初始化分离190
10.3 数组分配191
10.4 放置192
10.5 存储释放问题193
10.6 存储器耗尽195
10.7 自动废料收集196
10.7.1 可选的废料收集196
10.7.2 可选择的废料收集应该是什么样子的?198
第11章 重载200
11.1 引言200
11.2 重载的解析201
11.2.1 细粒度解析201
11.2.2 歧义控制203
11.2.3 空指针205
11.2.4 overload关键字207
11.3 类型安全的连接208
11.3.1 重载和连接208
11.3.2 C++连接的一种实现209
11.3.3 回顾210
11.4 对象的建立和复制212
11.4.1 对复制的控制212
11.4.2 对分配的控制213
11.4.3 对派生的控制213
11.4.4 按成员复制214
11.5 记法约定215
11.5.1 灵巧指针216
11.5.2 灵巧引用217
11.5.3 增量和减量的重载219
11.5.4 重载 ->*221
11.5.5 重载逗号运算符221
11.6 给C++增加运算符221
11.6.1 指数运算符221
11.6.2 用户定义运算符223
11.6.3 复合运算符225
11.7 枚举226
11.7.1 基于枚举的重载227
11.7.2 布尔类型227
第12章 多重继承229
12.1 引言229
12.2 普通基类230
12.3 虚基类231
12.4 对象布局模型235
12.4.1 虚基布局237
12.4.2 虚基类和强制237
12.5 方法组合238
12.6 有关多重继承的论战239
12.7 委托242
12.8 重命名243
12.9 基类和成员初始化245
第13章 类概念的精练247
13.1 引言247
13.2 抽象类247
13.2.1 为处理错误而用的抽象类248
13.2.2 抽象类型249
13.2.3 语法250
13.2.4 虚函数和构造函数251
13.3 const成员函数253
13.3.1 强制去掉const254
13.3.2 const定义的精练254
13.3.3 可变性与强制255
13.4 静态成员函数256
13.5 嵌套的类257
13.6 Inherited::258
13.7 放松覆盖规则260
13.8 多重方法264
13.9 保护成员267
13.10 改进代码生成268
13.11 指向成员的指针269
第14章 强制转换271
14.1 主要扩充271
14.2 运行时类型信息272
14.2.1 问题273
14.2.2 dynamic_cast运算符273
14.2.3 RTTI的使用和误用278
14.2.4 为什么提供一个“危险特征”280
14.2.5 typeid()运算符281
14.2.6 对象布局模型284
14.2.7 一个例子:简单的对象I/O285
14.2.8 考虑过的其他选择287
14.3 强制的一种新记法290
14.3.1 问题290
14.3.2 static_cast运算符292
14.3.3 reinterpret_cast运算符293
14.3.4 const_cast运算符295
14.3.5 新风格强制的影响296
第15章 模板298
15.1 引言298
15.2 模板299
15.3 类模板301
15.4 对模板参数的限制303
15.4.1 通过派生加以限制304
15.4.2 通过使用加以限制305
15.5 避免代码重复306
15.6 函数模板307
15.6.1 函数模板参数的推断308
15.6.2 描述函数模板的参数309
15.6.3 函数模板的重载311
15.7 语法313
15.8 组合技术315
15.8.1 表述实现策略316
15.8.2 描述顺序关系316
15.9 模板类之间的关系318
15.9.1 继承关系318
15.9.2 转换320
15.9.3 成员模板321
15.10 模板的实例化322
15.10.1 显式的实例化323
15.10.2 实例化点325
15.10.3 专门化329
15.10.4 查找模板定义331
15.11 模板的作用333
15.11.1 实现与界面的分离334
15.11.2 灵活性和效率334
15.11.3 对C++其他部分的影响335
第16章 异常处理337
16.1 引言337
16.2 目标和假设338
16.3 语法339
16.4 结组340
16.5 资源管理341
16.6 唤醒与终止343
16.7 非同步事件346
16.8 多层传播347
16.9 静态检查347
16.10 不变式350
第17章 名称空间351
17.1 引言351
17.2 问题352
17.3 解决方案的思想354
17.4 一个解决方案:名称空间355
17.4.1 有关使用名称空间的观点357
17.4.2 使名称空间投入使用358
17.4.3 名称空间的别名359
17.4.4 利用名称空间管理版本问题360
17.4.5 细节361
17.5 对于类的影响366
17.5.1 派生类366
17.5.2 使用基类368
17.5.3 清除全局的static368
17.6 与C语言的兼容性369
第18章 C语言预处理器371
索引375
· · · · · · (
收起)