内联函数:
函数调用是有时间开销的,如果函数本身只有几条语句,执行就会很快。但是如果函数被反复执行很多次,相比之下调用函数所产生的这个开销就会比较大。(但是c++作者是非常重视效率的)
为了减少函数调用的开销,产生了内联函数。
在函数定义前面加"inline"关键字,即可定义内联函数
inline int Max(int a,int b)
{
if(a>b) return a;
return b;
}
这个max函数本身很简单,反复多次执行时这个max产生的开销和调用函数的开销差不多。
当然有利有弊,可执行程序的体积会变大,编译器会把max函数体塞在调用语句处。
如k=Max(n1,n2);
if(n1>n2)
tmp=n1;
else tmp=n2;
k=tmp;没有生成操作路障等。
函数重载:
名字相同但是参数个数或参数类型不同。
(如果名字一样,参数一样,只有返回值不一样叫重复定义)
如:int Max(double f1,double f2){};int Max(int n1,int n2){};int Max(int n1,int n,int n3){};
好处:使得函数命名变得简单。编译器根据调用语句的中的实参的个数和类型判断应该使用哪个函数。
例:Max(3.4,2.5)//1 Max(2,4)////2 Max(1,2,3)///3
Max(3,2.4)///error,二义性
函数的缺省参数:
C++中,定义函数的时候可以让最右边的连续若干个参数有缺省值,那么调用函数的时候,若相应位置不写参数,参数值就是缺省值。
void func(int x1,int x2=2,int x3=3){}
func(10);//等效func(10,2,3)
func(10,8);//等效func(10,8,3)
func(10, ,8)//不行,只能最右边的连续若干个参数缺省。
函数参数可缺省的目的在于提高程序的可扩充性;
即如果某个写个好的函数要添加新的参数,而原先那些调用这个函数的语句,未必需要使用新增的参数,那么为了避免对原来那些函数调用语句的修改,就可以用缺省参数。
举例:比如我原来的程序只有求A,现在我要添加B;我需要把原来每个都要加上一个fun()的参数。有了缺省就可以很方便修改,即扩充性好。