1、用const修饰函数的参数
建议1:如果输入参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针指向的内存单元,祈祷保护作用。
建议2:对于ADT/UDT的输入参数,应该将“值传递”改为“const &传递”,目的死后提高效率。例如,将 void Func(A a) 改为 void Func(const A &a)。对于基本数据类型的输入参数,不要将“值传递”的方式改为“const & 传递”,否则既达不到提高效率的目的,又让人费解。
2、用const修饰函数的返回值
(1)如果给“指针传递”的函数返回值加const修饰符,函数返回值是一种契约性常量,不能被直接修改,并且该返回值只能被赋值给const修饰的同类型指针(除非强制转换)。
例如:const char * GetString(void); const char *str = GetString();
(2)如果函数采用“值传递”的方式,在一般情况下有余函数会把返回值拷贝到外部临时存储单元,所以加const修饰没意义。
但当函数以值传递方式返回ADT/UDT对象、返回引用或者返回指针时,有人会把函数当左值使用,,为防止此种错误发生,可以使用const来修饰返回值。
(3)函数返回值采用“引用传递”的方式不常见,这种方式一般出现在类的赋值函数中,目的是实现链式表达式。
注意:一定要搞清楚究竟是想反悔一个对象的“拷贝”,还是反悔“别名”(即引用),否则程序会出错。