C++学习笔记--函数参数扩展和占位参数

默认参数

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的一种升级


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值