带默认值参数的函数

默认参数值

可以预先设置默认的参数值,调用时如果给出实参,则采用实参值,否则采用预先设置的参数值。

int Add(int x = 5,int y = 6) {
    return x+y;
}
int main() {
    Add(10,20); // 10+20
    Add(10); // 10+6
    Add(); // 5+6
}

默认参数值的说明次序

有默认参数的形参必须在形参列表的最右,即默认参数值的右面不能有无默认值的参数;

为什么默认参数值的右面不能有无默认值的参数

因为在调用一个函数时,编译器从左到右匹配传递的参数。如果默认参数不连续,会导致编译器无法正确的确定参数的具体值或者是对应关系,从而导致混淆或错误。

例子:

//我们定义一个函数
void examplefunction(int a, int b = 10, int c);

//然后我们尝试调用它
examplefunction(5);

//此时编译器无法确定传递的参数‘5’,应该对应‘a’还是对应‘b’还是对应‘c’。

为了消除这种歧义,C++规定在有默认值参数的右边不能有没有默认值的参数。

默认参数值与函数的调用位置

如果一个函数有原型声明,且原型声明在定义之前,则默认参数值应在函数原型声明中给出;如果只有函数的定义,或函数在定义之前,则默认参数值可以在函数定义中给出

在原型声明之前:

int Add(int x = 5, int y = 6);
//原型声明之前
int main() {
    Add();
}

int Add(int x, int y)
//此处不能再指定默认值
{
    return x+y;
}

没有定义,没有原型声明:

int Add(int x = 5, int y = 6) {
    //没有原型声明
    return x+y;
}

int main() {
    Add();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值