目录 译序(侯捷) v 目录(Contents) vii 前言(Preface) xiii 致谢(Acknowledgments. 中文版略) xvii 导读(Introduction) 001 改变旧有的C习惯(Shifting from C to C ) 013 条款1:尽量以 const 和 inline 取代 #define 013 Prefer const and inline to #define. 条款2:尽量以 <iostream> 取代 <stdio.h> 017 Prefer <iostream> to <stdio.h>. 条款3:尽量以 new 和 取代 malloc 和 free 019 Prefer new and to malloc and free. 条款4:尽量使用 C 风格的注释形式 021 Prefer C -style comments. 内存管理(Memory Management) 022 条款5:使用相同形式的 new 和 023 Use the same form in corresponding uses of new and . 条款6:记得在 destructor 中以 对付 pointer members 024 Use on pointer members in destructors. 条款7:为内存不足的状况预做准备 025 Be prepared for out-of-memory conditions. 条款8:撰写 operator new 和 operator 时应遵行公约 033 Adhere to convention when writing operator new and operator . 条款9:避免遮掩了 new 的正规形式 037 Avoid hiding the normal form of new. 条款10:如果你写了一个operator new, 请对应也写一个operator 039 Write operator if you write operator new. 构造函数. 析构函数和Assignment 运算符 049 Constructors, Destructors, and Assignment Operators 条款11:如果classes内动态配置有内存, 请为此 class 宣告 一个 copy constructor 和一个 assignment 运算符 049 Declare a copy constructor and an assignment operator for classes with dynamically allocated memory. 条款12:在 constructor 中尽量以 initialization 取代 assignment 052 Prefer initialization to assignment in constructors. 条款13:Initialization list 中的 members 初始化排列次序应该 和其在 class 内的声明次序相同 057 List members in an initialization list in the order in which they are declared. 条款14:总是让 base class 拥有 virtual destructor 059 Make sure base classes have virtual destructors. 条款15:令 operator= 传回*this 的 reference 064 Have operator= return a reference to *this. 条款16:在 operator= 中为所有的 data members 赋予内容 068 Assign to all data members in operator=. 条款17:在 operator= 中检查是否自己赋值给自己 071 Check for assignment to self in operator=. 类与函数之设计和声明 077 Classes and Functions: Design and Declaration 条款18:努力让接口完满且最小化 079 Strive for class interfaces that are complete and minimal. 条款19:区分member functions, non-member functions和 friend functions三者 084 Differentiate among member functions, non-member functions, and friend functions. 条款20:避免将 data members 放在公开接口中 089 Avoid data members in the public interface. 条款21:尽可能使用 const 091 Use const whenever possible. 条款22:尽量使用 pass-by-reference(传址), 少用 pass-by-value(传值) 098 Prefer pass-by-reference to pass-by-value. 条款23:当你必须传回Object 时, 不要尝试传回 reference 101 Don’t try to return a reference when you must return an Object. 条款24:在函数重载(function overloading)和 参数缺省化(parameter defaulting)之间, 谨慎抉择 106 Choose carefully between function overloading and parameter defaulting. 条款25:避免对指针型别和数值型别进行重载 109 Avoid overloading on a pointer and a numerical type. 条款26:防卫潜伏的 ambiguity(模棱两可)状态 113 Guard against potential ambiguity. 条款27:如果不想使用编译器暗自产生的 member functions, 就应该明白拒绝它 116 Explicitly disallow use of implicitly generated member functions you don’t want. 条款28:尝试切割 global namespace(全域命名空间) 117 Partition the global namespace. 类与函数之实现 123 Classes and Functions: Implementation 条款29:避免传回内部数据的 handles 123 Avoid returning handles to internal data. 条款30:避免写出member function, 传回一个 non-const pointer 或 reference 并以之指向较低存取层级的 members 129 Avoid member functions that return non-const pointers or references to members less accessible than themselves. 条款31:千万不要传回函数内 local 对象的 reference, 或是函数内以 new 获得的指针所指的对象 131 Never return a reference to a local Object or to a dereferenced pointer initialized by new within the function. 条款32:尽可能延缓变量定义式的出现 135 Postpone variable definitions as long as possible. 条款33:明智地运用 inlining 137 Use inlining judiciously. 条款34:将文件之间的编译依赖关系(compilation dependencies) 降至最低 143 Minimize compilation dependencies between files. 继承机制与面向对象设计 153 Inheritance and Object-Oriented Design 条款35:确定你的 public inheritance 模塑出 isa 的关系 154 Make sure public inheritance models isa. 条款36:区分接口继承(interface inheritance)和 实现继承(implementation inheritance) 161 Differentiate between inheritance of interface and inheritance of implementation. 条款37:绝对不要重新定义一个继承而来的非虚拟函数 169 Never redefine an inherited nonvirtual function. 条款38:绝对不要重新定义一个继承而来的缺省参数值 171 Never redefine an inherited default parameter value. 条款39:避免在继承体系中做 cast down(向下转型)的动作 173 Avoid casts down the inheritance hierarchy. 条款40:通过 layering(分层技术)来模塑 has-a 或 is-implemented-in-terms-of 的关系 182 Model has-a or is-implemented-in-terms-of through layering. 条款41:区分 inheritance 和 templates 185 Differentiate between inheritance and templates. 条款42:明智地运用 private inheritance(私有继承) 189 Use private inheritance judiciously. 条款43:明智地运用多继承(multiple inheritance, MI) 194 Use multiple inheritance judiciously. 条款44:说出你的意思并了解你所说的每一句话 210 Say what you mean; understand what you’re saying.杂项讨论(Miscellany) 212 条款45:知道 C (编译器)默默为我们完成和调用哪些函数 212 Know what functions C silently writes and calls. 条款46:宁愿编译和连接时出错, 也不要执行时才错 216 Prefer compile-time and link-time errors to runtime errors. 219 Ensure that non-local static Objects are initialized before they’re used. 条款48:不要对编译器的警告讯息视而不见 223 Pay attention to compiler warnings. 条款49:尽量让自己熟悉 C 标准程序库 224 Familiarize yourself with the standard library. 条款50:加强自己对 C 的了解 232 Improve your understanding of C .
| |