打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
06、C++函数参数扩展和占位参数

默认参数

C++中可以在函数声明时为参数提供默认值,参数的默认值必须在函数声明中指定,还有一种函数是在main函数之前定义并实现的,这种也可以给函数参数提供默认值需要提醒的是:只能在函数声明时提供默认值,在后面的函数实现中提供默认值是错误的。当函数被调用时没有传入实参时,则使用默认值,例如:

  1. #include <stdio.h>
  2. int sum(int x = 1, int y = 1, int z = 1);

  3. int main(int argc,char **argv)
  4. {
  5. printf("sum = %d\n",sum());//不传入参数时使用默认参数
  6. return 0;
  7. }

  8. int sum(int x, int y, int z)
  9. {
  10. return x+y+z;
  11. }

输出结果为:sum = 3;,这就是默认参数的使用。

上面例子是给所有参数都设置默认值的情况,现在讨论下如果不需要都设置默认参数时应该遵循的规则。

1、参数的默认值必须从右到左。例如下面几种设置方法:

  1. int sum(int x , int y = 1, int z = 1);//正确
  2. int sum(int x , int y , int z = 1);//正确
  3. int sum(int x , int y = 1, int z);//错误
  4. int sum(int x = 1, int y = 1, int z);//错误

这就是从右向左的规则,可以通过改变参数顺序达到具体想初始化某些参数的目的,但是一定要遵守这个规则。

2、函数调用时使用了默认值时,则后续参数必须使用默认值。

  1. sum(0);//x = 0,y = 1,z = 1
  2. sum(2,3);//x = 2,y = 3,z = 1
默认值都为1时,根据不同的调用方式有不同的结果,但是都会遵循规则。

函数占位参数

什么叫占位参数,就是函数参数列表中只有参数类型,而没有参数名,一般情况下无法使用占位参数,但是在函数调用时可以却可以传值

  1. int fun(int x, int)
  2. {
  3. return x;//第二个参数无法使用
  4. }
  5. ...
  6. ...
  7. fun(1,2)//允许
既然存在占位参数,那么它有什么意义?
在使用中,占位参数和默认参数结合起来使用,其目的就是为了兼容C中的不规范写法。

C中void func();和void func(void);并不是等价的,前者能接收任意参数,即func()、func(1)、func(1,2)、func(1,2,3)都是能通过编译的,虽然不一定有什么意义,后者没有参数。

  1. int func(int x, int = 0);

  2. int main(int argc, char *argv[])
  3. {
  4. printf("%d\n", func(1));
  5. printf("%d\n", func(2, 3));

  6. return 0;
  7. }

  8. int func(int x, int)
  9. {
  10. return x;
  11. }

C中func();能接收任意参数,C++为了能够兼容C所以就有了占位参数和默认参数的结合。但是实际上在实际项目中占位参数根本就不使用,从这一点也能看出来C++只是C的一种升级

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
教你一招 | Python: 函数参数魔法
C和C++__带默认值参数的函数说明
默认参数与函数重载,及函数匹配
C++对C语言的非面向对象特性扩充(2)
C/C++ 变长参数
C语言程序设计案例式教程-第6章 函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服