C++语言基础|带默认形参值的函数
1 带默认形参值的函数
1.1 相关定义
C++语言允许在函数说明或函数定义中为形参预赋一个默认的值,这样的函数就叫作带有默认形参值的函数。在调用带有默认参数值的函数时,若为相应形参指定了实参,则形参将使用实参的值;否则,形参将使用其默认值。1
1.2 使用示例
示例代码如下:
int sub(int x=8,int y=3)
{
return x–y;
}
int main( )
{
sub(20,15); //传递给形参x,y的值分别为20和15
sub(10); //传递给形参x,y的值分别为10和3
sub(); //传递给形参x,y的值分别为8和3
return 0;
}
2 使用注意事项
2.1 多个默认形参值必须连续
- 若函数具有多个形参,则默认形参值必须自右向左连续地定义,并且在一个默认形参值的右边不能有未指定默认值的参数。将使用实参的值;否则,形参将使用其默认值。
int f(int a,float b=5.0,char c='.',int d=10); //正确
int f(int a=1,float b=5.0,char c='.',int d); //错误, d未给值
int f(int a=1,float b,char c='.',int d=10); //错误, b未给值
2.2 实参的省略
- 在调用一个函数时,如果省去了某个实参,则直到最右端的实参都要省去。
int f(int a,float b=5.0,char c='.', int d=10);
f(8, , ,4); //语法错误
2.3 默认形参值的说明必须出现在函数调用之前
- 默认形参值的说明必须出现在函数调用之前。如果在函数原型中指定,则在函数定义中不得重复指定。
int sub(int x=8,int y=3); //默认形参值在函数原型中已经给出
int main( ){
sub(20,15); //20-15
sub(10); //10-3
sub(); //8-3
return 0;
}
int sub(int x,int y) { //默认形参值不需要再在函数定义时给出
return x-y;
}
2.4 相同作用域多次定义
- 在同一个作用域,一旦定义了默认形参值,就不能再定义它。
int f(int a,float b,char c='.',int d=10);
int f(int a,float b,char c='.',int d=18); //错误:企图再次定义默认参数c和d
2.5 不同作用域多次定义
- 如果几个函数说明出现在不同的作用域内,则允许分别为它们提供不同的默认形参值。
int f(int a=6,float b=5.0,char c=',',int d=10);
int main()
{
int f(int a=6,float b=6.0,char c=',',int d=18);
cout << f() << endl; //f函数使用局部默认参数值
return 0;
}
2.6 形参默认值形式
- 对形参默认值的指定可以是初始化表达式,甚至可以包含函数调用。
int f(int a,float b=5.0,char c='.',int d=sub(20,15)); //d参数的默认值是函数调用
2.7 形参名的省略
- 在函数原型给出了形参的默认值时,形参名可以省略。
int f(int , float =5.0, char =’.’, int = sub(20,15));
本教程仅供教学使用,参考教材 :《C++语言程序设计教程》,杨进才、沈显君编著,清华大学出版社,2022年1月第4版 ↩︎