7.6 函数编写的建议
本节简单介绍如何写出高效,不易出错的代码,当然,这些建议只是最基本的几条,在网络上或者专门讨论C++编程技巧的教材中,讨论函数编写原则和建议的篇幅是这里的几十倍,这里权当是抛砖引玉,有效与否还靠读者的理解和检验。
7.6.1 合理使用const
在指针传递或引用传递时,如果参数仅仅是输入用,则应在类型前加const,以防止指针在函数体内被意外修改,若输入参数采用“值传递”方式,函数将自动产生临时变量用于复制该参数,该参数本就不需要保护,不用const修饰。
对于非内部数据类型的输入参数,尤其是占内存字节较多的参数,应该将“值传递”改为“const引用传递”,以提高效率。但对内部数据类型的输入参数而言,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。
C++中,返回值也可用const修饰,这样,在返回引用或指针时,不允许使用如下述代码的形式对返回值进行改写。
函数名(参数表)=表达式;
示例代码如7.17所示。
代码7.17 const与函数返回值AboutConst
<———————————-文件名:example717.cpp———————————————-> 01 #include<iostream> 02 using namespace std; 03 int&addInt(int num1,int num2,int&sum)//使用const修饰返回值可防意外改写 04 { 05 sum=num1+num2; 06 return sum; 07 } 08 int main() 09 { 10 int x=1,y=2,sum=0; 11 addInt(x,y,sum)=9;//如果addInt函数返回值使用const修饰,本句将出错 12 //sum=10;这种修改形式是合法的 13 cout<<"sum:"<<sum<<endl; 14 return 0; 15 }
输出结果如下所示。
sum:9
【代码解析】代码第11行,通过“addInt(x,y,sum)=9;”完成了对sum的改写,这种写法多少有些费解,常给程序带来一些隐藏的问题。为了防止上述形式对函数返回值的改写,可以用const来修饰函数,函数头定义为如下所示。
const nt&addInt(int num1,int num2,int&sum)
这样,编译器将指出语句“addInt(x,y,sum)=9;”存在错误,需要注意的是,const只修饰函数返回值不能进行修改,并不改变sum的读写属性,在程序中仍可通过如“sum=10;”的形式改写sum。