先来个例子:
1 #include <iostream>
2
3 using namespace std;
4
5 int sub(int x=8,int y=3){
6 return x+y;
7 }
8
9 int main(){
10 //freopen("D:\\input.in","r",stdin);
11 //freopen("D:\\output.out","w",stdout);
12 cout<<sub(20,15)<<endl;//35
13 cout<<sub(10)<<endl;//13
14 cout<<sub()<<endl;//11
15 return 0;
16 }
需要注意的地方:
1.若函数具有多个形参,则默认形参值必须自右向左连续地定义,并且在一个默认形参值的右边不能有未指定默认值的参数。这是由于c++语言在函数调用时参数是自右向左入栈这一约定决定的。
eg:int f(int a, float b=5.0, char c='c');
2.在调用一个函数时,如果省去了某个实参,则直到最右端的所有实参都得省去(当然,与其对应的形参要有默认值)。
eg:int f(int a, float b=5.0, char c='c', int d=10); f(9,4.5) <=> f(9,4.5,'c',10).
3.默认形参值的说明必须出现在函数调用之前。而且,如果存在函数原型,则形参的默认值应在函数原型中指定;否则在函数定义中指定。另外,若函数原型中已给出了形参的默认值,则在函数定义中不得重复指定,即使所指定的默认值完全相同也不行。
eg:
1 #include <iostream>
2
3 using namespace std;
4
5 int sub(int x=8,int y=3);
6
7 int main(){
8 //freopen("D:\\input.in","r",stdin);
9 //freopen("D:\\output.out","w",stdout);
10 cout<<sub(20,15)<<endl;//35
11 cout<<sub(10)<<endl;//13
12 cout<<sub()<<endl;//11
13 return 0;
14 }
15 int sub(int x,int y){
16 return x+y;
17 }
4.在同一个作用域,一旦定义了默认形参值,就不能再定义它。
5.如果几个函数说明出现在不同的作用域内,则允许分别为它们提供不同的默认形参值。
eg:
1 #include <iostream>
2
3 using namespace std;
4
5 int sub(int x=8,int y=3);
6
7 int main(){
8 //freopen("D:\\input.in","r",stdin);
9 //freopen("D:\\output.out","w",stdout);
10 int sub(int x=0,int y=0);
11 cout<<sub()<<endl;
12 return 0;
13 }
6.对形参默认值的指定可以是初始化表达式,甚至可以包含函数调用。
eg:int f(int a, float b=5.0, char c='c', int d=sub(20,15));
- 在函数原型给出了形参的默认值时,形参名可以省略。
eg:int f(int, float=5.0, char='c', int=sub(20,15));
原文链接: https://www.cnblogs.com/jiu0821/p/4750316.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/220906
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!