默认参数
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;
- }
上面例子是给所有参数都设置默认值的情况,现在讨论下如果不需要都设置默认参数时应该遵循的规则。
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中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的一种升级
联系客服