1.构造函数最好写initializationlist。
解释:写到构造函数体里与initializationlist的区别在于一个前者是先定义在进行(拷贝)赋值。后者是在定义点直接进行初始化。对于普通变量汇编指令都是一样的(代码其实不一样(我觉得这里是编译器进行了优化))和类对象它做的处理是不一样的。对类对象来讲,如果是构造函数体里初始化,相当于先定义调用构造函数,然后赋值,调用拷贝赋值函数;如果是initializationlist相当于只调用了拷贝构造函数。很明显后者开销小于前者。还有一些成员变量的初始化如成员对象只能写到initializationlist里。
2.函数该加const要加。
解释:常对象无法调用非const成员函数,有更改数据的风险。
3.参数的传递尽量pass by reference,加不加const要考虑。
解释:传引用相当于传一个指针的大小,能减少时间上的开销。加不加const?不想改实参值加,否则不加。
4.返回值的return时候尽量return by reference,局部变量不能return by reference。
解释:传引用相当于传一个指针的大小,能减少时间上的开销。但是如果返回一个局部变量的reference,函数调用结束,局部变量消亡,引用一个消亡的变量,所以肯定是不可以的。
5.数据绝大多数private,函数大部分public。
解释:对于大多数情况下,不想让外界知道我私有的内容,设置为private,但是需要提供公有的接口设置成public。为什么这里说一般?假设单例模式,构造函数都是private了,所以我说一般。
6.成员变量尽量以variable_;来命名。
解释:成员变量一般加_来区分,因为系统定义的一些变量都把_放前面,所以为了避免命名冲突,我们选择放后面。