高质量C++编程指南 ----其它编程经验

11.1 使用const 提高函数的健壮性

11.1.1 用const 修饰函数的参数

如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能.

const 只能修饰输入参数:

(1)如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针,起到保护作用.

(2)如果输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const 修饰。

(3)对于非内部数据类型的参数而言,象void Func(A a) 这样声明的函数注定效率比较底。因为函数体内将产生A 类型的临时对象用于复制参数a,而临时对象的构造、复制、析构过程都将消耗时间,为了提高效率,可以将函数声明改为void Func(A &a),因为“引用传递”仅借用一下参数的别名而已,不需要产生临时对象

11.1.2 用const 修饰函数的返回值

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

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

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

11.1.3 const 成员函数

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


11.2 提高程序的效率

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

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

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

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

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

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

你可能感兴趣的:(高质量C++编程指南 ----其它编程经验)