默认参数
C++中可以在函数声明时为参数提供默认值,参数的默认值必须在函数声明中指定,还有一种函数是在main函数之前定义并实现的,这种也可以给函数参数提供默认值需要提醒的是:只能在函数声明时提供默认值,在后面的函数实现中提供默认值是错误的。当函数被调用时没有传入实参时,则使用默认值,例如:
#include <stdio.h>
int sum(int x = 1, int y = 1, int z = 1);
int main(int argc,char **argv)
{
printf("sum = %d\n",sum());//不传入参数时使用默认参数
return 0;
}
int sum(int x, int y, int z)
{
return x+y+z;
}
输出结果为:sum = 3;,这就是默认参数的使用。
上面例子是给所有参数都设置默认值的情况,现在讨论下如果不需要都设置默认参数时应该遵循的规则。
1、参数的默认值必须从右到左。例如下面几种设置方法:
int sum(int x , int y = 1, int z = 1);//正确
int sum(int x , int y , int z = 1);//正确
int sum(int x , int y = 1, int z);//错误
int sum(int x = 1, int y = 1, int z);//错误
这就是从右向左的规则,可以通过改变参数顺序达到具体想初始化某些参数的目的,但是一定要遵守这个规则。
2、函数调用时使用了默认值时,则后续参数必须使用默认值。
sum(0);//x = 0,y = 1,z = 1
sum(2,3);//x = 2,y = 3,z = 1
默认值都为1时,根据不同的调用方式有不同的结果,但是都会遵循规则。
函数占位参数
什么叫占位参数,就是函数参数列表中只有参数类型,而没有参数名,一般情况下无法使用占位参数,但是在函数调用时可以却可以传值
int fun(int x, int)
{
return x;//第二个参数无法使用
}
...
...
fun(1,2)//允许
既然存在占位参数,那么它有什么意义?
在使用中,占位参数和默认参数结合起来使用,其目的就是为了兼容C中的不规范写法。
C中void func();和void func(void);并不是等价的,前者能接收任意参数,即func()、func(1)、func(1,2)、func(1,2,3)都是能通过编译的,虽然不一定有什么意义,后者没有参数。
int func(int x, int = 0);
int main(int argc, char *argv[])
{
printf("%d\n", func(1));
printf("%d\n", func(2, 3));
return 0;
}
int func(int x, int)
{
return x;
}
C中func();能接收任意参数,C++为了能够兼容C所以就有了占位参数和默认参数的结合。但是实际上在实际项目中占位参数根本就不使用,从这一点也能看出来C++只是C的一种升级