第11 章 其它编程经验

来源:互联网 发布:英国空军和德国 知乎 编辑:程序博客网 时间:2024/05/02 18:47

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

     看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的

魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。

11.1.1 用const 修饰函数的参数

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

const 只能修饰输入参数:

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

例如StringCopy 函数:

void StringCopy(char *strDestination, const char *strSource);

其中strSource 是输入参数,strDestination 是输出参数。给strSource 加上const

修饰后,如果函数体内的语句试图改动strSource 的内容,编译器将指出错误。

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

例如不要将函数void Func1(int x) 写成void Func1(const int x)。同理不要将

函数void Func2(A a) 写成void Func2(const A a)。其中A 为用户自定义的数据类型。

3.对于非内部数据类型的参数而言,象void Func(A a) 这样声明的函数注定效率比较低。

   因为函数体内将产生A 类型的临时对象用于复制参数a,而临时对象的构造、复制、析构过程都将消耗时间。

 

11.1.2 用const 修饰函数的返回值

11.1.3 const 成员函数

 

11.2 提高程序的效率

【规则11-2-1】不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、

可读性等质量因素的前提下,设法提高程序的效率。

【规则11-2-2】以提高程序的全局效率为主,提高局部效率为辅。