C++中默认参数是什么?谁给我讲讲
追问:void func(int a,int b=2,int c=3,int d=4) //okfunc(2,15, ,20); //error:只能从右向左顺序匹配默认值
不可以缺省吗?之前的c不是有了个默认的参数值为3了吗?
追问:void func(int a,int b=2,int c=3,int d=4) //okfunc(2,15, ,20); //error:只能从右向左顺序匹配默认值
不可以缺省吗?之前的c不是有了个默认的参数值为3了吗?
答案:1、默认参数的目的默认参数也称缺省参数,C++可以给函数定义默认参数。
通常,调用函数时,要为函数的每个参数给定对应的实参,但有时需要用相同的实参反复调用该函数,这时,C++可以给该参数定义默认值,默认参数在函数声明中提供。如声明函数
void delay(int loops=1000);
这样,无论何时调用delay()函数,都不用给loops赋值,程序会自动将它当作1000进行处理;当然也可以对其进行赋值。若对其赋值,则按所赋的实参进行运算;若没有赋值,则按指定的默认值进行运算。
例如:
delay(2500); // loops设置为2500
delay(); //OK:loops采用默认值1000
允许函数默认参数值,是为了让编程更简单。
当一个函数有多个默认参数时,在主函数调用该函数时,会出现实参个数小于函数真实参数个数(形参个数)的现象,实际上缺少的参数在该函数声明时已经提供了默认值,实参中不赋值等于采用了默认值。(我们在程序中调用MFC内置函数时会经常遇见这种情况!)
2、默认参数的声明
默认参数在函数声明中提供
当函数又有声明又有定义时,定义中不允许提供默认参数;当函数只有定义时,默认参数才可以出现在函数定义中。
3、默认参数的顺序规定
如果一个函数中有多个默认参数,则形参分布中,默认参数应该从右至左逐渐定义。
也就是说,默认参数只能集中放在函数参数的最后面,这是为了保证函数调用时参数传递的正确性。
例如:
void func(int a=1,int b,int c=3,int d=4) //error
void func(int a,int b=2,int c=3,int d=4) //ok
而在调用该函数时,系统会向左匹配参数。
例如,对第二个函数声明,其正确的调用方法为:
func(10,15,20,30); //OK:调用时给出所有实参
func(); //error:参数a没有默认值
func(12,12); //OK:参数c和d采用默认值
func(2,15, ,20); //error:只能从右向左顺序匹配默认值