一、Use const whenever you need

1.const修饰函数的参数

(1)对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将void Func(A a)改为void Func(const A &a)。对于内部数据类型,则无需将值传递改为引用传递,因为内部数据类型不存在构造和析构的过程,其复制也非常快,值传递的效率和引用传递的效率相当。

(2)对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x)不应该改为void Func(const int &x)。

2.用const修饰函数的返回值

(1)如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类指针。

(2)如果函数返回值采用“值传递方式”,由于函数会吧返回值复制到外部临时的存储单元中,加const修饰没有任何价值。

(3)函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。

3.const成员函数

任何不会修改数据成员的函数都应该声明为const类型。

 

注:

(1)如果把const的数据赋给非const,会编译错误。

(2)如果在const成员函数中,修改了数据成员或者调用了非const成员函数,会编译错误。

 

二、提高程序的效率

1.不要一味地追求程序的效率,应当在满足正确、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。

2.以提高程序的全局效率为主,提高局部效率为辅。

3.在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化。

4.先优化数据结构和算法,再优化执行代码。

5.有时候时间效率和空间效率可能对立,此时应当分析哪个更重要,作出适当的折中。例如多花费一些内存来提高性能。

6.不要追求紧凑的代码,因为紧凑的代码并不能产生高效的机器码。

 

三、一些有益的建议

1.当心那些视觉上不易分辨的操作符发生书写错误。例如“==”和“=”。

2.变量(指针、数组)被创建后应当及时把它们初始化,以防止把未初始化的变量当成右值使用。

3.当心变量的初值、缺省值错误,或者精度不够。

4.当心数据类型转换发生错误。尽量使用显式的数据类型转换(让人们知道发生了什么事),避免让编译器轻悄悄地进行隐式的数据类型转换。

5.当心变量发生上溢或下溢,数组的下标越界。

6.当心忘记编写错误处理程序,当心错误处理程序本身有误。

7.当心文件I/O有错误。

8.避免编写技巧性很高代码。

9.不要设计面面俱到、非常灵活的数据结构。

10.如果原有的代码质量比较好,尽量复用它。但是不要修补很差劲的代码,应当重新编写。

11.尽量使用标准函数库,不要“发明”已经存在的库函数。

12.尽量不要使用与具体硬件或软件环境关系密切的变量。

13.把编译器的选择项设置为最严格状态。

14.如果可能的话,使用PC-Lint、LogiScope等工具进行代码审查。

posted on 2013-03-23 14:39  guoxiang  阅读(189)  评论(0编辑  收藏  举报