-
让接口容易被正确使用,不易被误用
- 任何接口如果要求客户记得做某些事情,就是有着“不正确使用”的倾向。
-
设计class犹如type
- C++ 就像在其他OOP语言一样,当你定义一个新class,也就定义了一个新type。身为C++程序员,你的许多时间主要用来扩张你的类型系统。这意味着你不只是class设计者,还是type设计者。重载函数和操作符,控制内存的分配和归还,定义对象的初始化和终结等都在你的手上。因此你应该带着和“语言设计者当初设计语言内置类型时”一样的谨慎来研讨class的设计。
-
宁以 pass-by-reference-to-const 替换 pass-by-value
- reference 往往以指针实现出来,因此pass by reference 通常意味着传递的是指针。因此如果你有个对象属于内置类型pass by value方式可能被选择。规则的改变取决于你使用哪一部分c++
- 尽量以pass by reference to const 替换 pass by value 。前者通常比较高效,并可避免切割问题。
- 对于内置类型,STL迭代器,函数对象,pass by value 往往比较适当。
-
必须要返回对象时,别妄想返回其reference
- 绝不要返回pointers或reference指向一个local stack对象,或返回reference 指向一个heap-allocated对象,或返回pointer 或 reference 指向一个local static对象而有可能同时需要多个这样的对象。
-
将成员变量声明为private
- 从封装的角度观之,其实只有两种访问权限,private 和 其他。
-
宁以non-member non-friend 替换member函数
- 愈少的代码可以访问数据,愈多东西被封装
-
若所有参数都需要类型转换,请为此采用non-member 函数
- 如果你需要为某个函数的所有参数进行类型转换(包括this指针所指的那个隐喻参数),那么这个函数必须是个non_member。