泛型程序设计与C++标准库 1
条款1:流 1
目录与大师面对面(译序) 3
序 5
条款2:Predicates,之一:remove()删除了什么? 6
前言 7
条款3:Predicates,之二:状态带来的问题 11
条款4:可扩充的模板:使用继承还是traits? 19
条款5:typename 32
条款6:容器、指针和“不是容器的容器” 36
条款7:使用vector和deque 46
条款8:使用set和map 53
条款9:等同的代码吗? 59
条款10:模板特殊化与重载 64
条款11:Mastermind 69
优化与性能 83
条款12:内联 83
条款13:缓式优化,之一:一个普通的旧式String 86
条款14:缓式优化,之二:引入缓式优化 90
条款15:缓式优化,之三:迭代器与引用 94
条款16:缓式优化,之四:多线程环境 103
异常安全议题及技术 115
条款17:构造函数失败,之一:对象生命期 115
条款18:构造函数失败,之二:吸收异常? 119
条款19:未捕获的异常 126
条款20:未管理指针存在的问题,之一:参数求值 132
条款21:未管理指针存在的问题,之二:使用auto_ptr? 135
条款22:异常安全与类的设计,之一:拷贝赋值 141
条款23:异常安全与类的设计,之二:继承 149
继承与多态 155
条款24:为什么要使用多继承? 155
条款25:模拟多继承 159
条款26:多继承与连体双婴问题 162
条款27:(非)纯虚函数 167
条款28:受控的多态 172
内存及资源管理 175
条款29:使用auto_ptr 175
条款30:智能指针成员,之一:auto_ptr存在的问题 182
条款31:智能指针成员,之二:设计ValuePtr 187
自由函数与宏 201
条款32:递归声明 201
条款33:模拟嵌套函数 206
条款34:预处理宏 215
条款35:宏定义 218
杂项议题 223
条款36:初始化 223
条款37:前置声明 226
条款38:typedef 228
条款39:名字空间,之一:using声明和using指令 231
条款40:名字空间,之二:迁徙到名字空间 234
后记 245
附录A:(在多线程环境下)并非优化 247
附录B:单线程String实现与多线程安全String实现的对比测试结果 263
参考文献 271
索引 273