1. 如果一个函数中有多个默认参数,则形参分布中,默认参数应从右至左逐渐定义。当调用函数时,只能向左匹配参数。即默认参数右边全是默认参数。
2.默认参数可将一系列简单的重载函数合成为一个。例如, 下面3个重载函数:
void point(int,int){//...}
void point(int a){return point(a,4);}
void point(){return point(3,4);}
可以用下面的默认参数的函数来替代:
void point(int=3,int=4);
3.
默认参数可以放在函数声明或者定义中,但只能放在二者之一
通常我们都将默认参数放在函数声明中,因为如果放在函数定义中,那么将只能在函数定义所在地文件中调用该函数。
4.
函数重载时谨慎使用默认参数值
比如下面两个重载函数func,一个只接受一个参数,而另一个接受两个参数,包括一个默认参数。
class Test { public: int func(int a) { return a; } int func(int a, int b = 1) { return a + b; } } ;
如果像下面这样调用函数
int main(void) { Test test; int result = test.func(1); getchar() ; return 0 ; }
则编译器就不知道选择哪个函数,这就造成了混淆。
(1)在函数声明或定义时,直接对参数赋值。这就是默认参数;int f(paremrters);这里的参数paranters没有申明类型,就采用默认类型,(c语言中的默认类型均为int型,与设计语言结构的时候,其他类型均没有实现有关。)(3)默认参数调用时,则遵循参数调用顺序,自左到右逐个调用。这一点要与参数申明分清楚。
(4)默认值可以是全局变量、全局常量,甚至是一个函数。但不可以是局部变量。因为默认参数的调用是在编译时确定的,而局部变量位置与默认值在编译时无法确定。