默认参数值
可以预先设置默认的参数值,调用时如果给出实参,则采用实参值,否则采用预先设置的参数值。
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();
}