第1篇 C++基本语言特征 1
第1章 快速入门 1
实用经验1C++程序由哪些部分构成 2
实用经验2既有面向过程,为何还要面向对象 6
实用经验3掌握在C++中如何使用C 10
实用经验4C++比C加了什么 15
第2章 变量和类型 21
实用经验5计算机是如何存储变量的 22
实用经验6确保每个对象在使用前已被初始化 28
实用经验7局部变量和全局变量的差别 31
实用经验8掌握变量定义的位置与时机 37
实用经验9引用难道只是别人的替身 39
实用经验10枚举和一组预处理的#define有何不同 42
实用经验11为何struct x1{struct x1 stX};无法通过编译 46
实用经验12实现可变数组struct{int namelen;char namestr[1];}; 50
实用经验13typedef使用的陷阱 54
实用经验14优化结构体中元素的布局 58
实用经验15既有结构,为何引入联合 64
实用经验16提防隐式转换带来的麻烦 67
实用经验17深刻理解void和void 73
实用经验18如何判定变量是否相等 77
第3章 关键字 84
实用经验19尽可能多地使用const 85
实用经验20volatile和mutable用在何处 89
实用经验21尽量用new/delete替代malloc/free 95
实用经验22使用new/delete时要采用相同的形式 101
实用经验23sizeof和对象的大小 104
实用经验24谨慎使用static 112
第4章 数组和指针 118
实用经验25理解指针的本质 119
实用经验26论数组和指针的等价性 124
实用经验27再论数组和指针的差异性 127
实用经验28充满疑惑的数组指针和指针数组 130
实用经验29禁止以多态的形式处理数组 133
实用经验30防微杜渐,拒绝野指针 136
实用经验31臭名昭著的空指针到底是什么 139
实用经验32多维数组和指针 143
实用经验33引用和指针的差异 148
第5章 表达式和语句 154
实用经验34运算符引发的混乱 155
实用经验35尽量使用C++转换操作符 159
实用经验36表达式求值顺序不要想当然 163
实用经验37switch-case的陷阱 167
实用经验38a‖b和a&&b的陷阱 172
实用经验39“悬挂”else引起的问题 176
实用经验40标示语句结束的分号的思考 179
实用经验41goto真的一无是处吗 182
实用经验42条件操作符和逗号操作符 187
实用经验43同魔鬼数字说再见 189
实用经验44关于循环语句的讨论 191
第6章 函数 196
实用经验45禁止函数返回局部变量的引用 197
实用经验46函数传值、传指针及传引用的效率分析 201
实用经验47内联函数会像宏一样替换吗 207
实用经验48函数重载需考虑什么 210
实用经验49不要让main返回void 216
实用经验50尽量拒绝使用变参函数 219
实用经验51如何降低函数的圈复杂度 225
第7章 字符和字符串 230
实用经验52关于字符编码的讨论 231
实用经验53请牢记字符串结束标志为‘\0’ 233
实用经验54请务必小心使用memcpy0系列函数 236
实用经验55正确地使用字符串处理函数 238
第8章 预处理 242
实用经验56使用#define定义字面值和伪函数 243
实用经验57#define的使用陷阱 247
实用经验58防止重复包含头文件 252
实用经验59assert的副作用 255
实用经验60关于#和##的讨论 259
第2篇 类和数据抽象 262
第9章 类 262
实用经验61绝不让构造函数为虚函数 263
实用经验62避免在构造/析构函数中调用虚函数 266
实用经验63不使用编译器自动生成的函数,就明确拒绝 269
实用经验64struct和class的关系 271
实用经验65class对象大小与什么有关系 276
实用经验66将成员变量声明为private 282
实用经验67关于对象复制的思考 286
实用经验68首选初始化列表实现类成员初始化 290
实用经验69理解常量成员函数 293
第10章 重载操作符 298
实用经验70由重载&&、‖和,操作符想到的 299
实用经验71区别++/--操作符前置和后置差异 304
实用经验72重载operator[]的注意事项 308
实用经验73重载operator=的陷阱 311
实用经验74重载操作符,类成员函数还是友元函数 318
实用经验75有些运算符重载应该成对实现 323
第3篇 C++面向对象机制 325
第11章 继承和多态 325
实用经验76多态基类的析构函数应为虚函数 326
实用经验77明晰public、protected、private3种继承差别 331
实用经验78慎用多继承机制 336
实用经验79时刻提防对象切片 341
实用经验80明晰派生类构造/析构运行原理 345
实用经验81谨慎使用private继承 351
实用经验82区分overloading、overriding、hiding的差异 354
实用经验83确保public继承是“is-a”关系 359
实用经验84区分接口继承和实现继承 362
实用经验85不要重新定义继承而来的非虚函数 366
实用经验86绝对不要重新定义继承而来的默认参数 368
实用经验87切忌继承过度滥用 372
实用经验88虚函数重载的陷阱 376
实用经验89关于虚赋值的问题 379
第12章 模板和泛型 384
实用经验90将模板的声明和定义放到一个文件中 385
实用经验91区分继承、模板及组合 391
实用经验92区分函数模板与模板函数、类模板和模板类 395
第4篇 C++高级特性 400
第13章 高级特性 400
实用经验93合理地使用断言(ASSERT) 401
实用经验94虚函数的实现原理 404
实用经验95检测和定位内存泄漏的技巧 412
实用经验96可执行文件*.exe(*.dll)剖析 419
实用经验97C++为何引入命名空间 424
实用经验98避免使用“聪明的技巧” 429
实用经验99试着在代码中使用设计模式 431
实用经验100改善C++程序运行效率的措施 434
实用经验101提高(改善)代码可读性的措施 439