C++函数可以带有默认参数,调用含有默认参数的函数,可以包含实参,也可以省略实参。我们可以为函数一个或多个形参提供默认值,但是一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值,因为函数调用时按位置解析实参,默认实参负责填补函数调用缺省的尾部实参。
void f(int a,int b,int c=0){}; //定义一个函数
f(1,2); //c使用默认实参值0
f(1,2,3); //c使用实参3
问题来了,假如一个函数有默认实参,由于习惯将函数声明放在.hpp/.h而函数定义.cpp文件,那么该实参究竟是放在函数声明中还是函数定义中或者二者可同时放默认实参呢?
- 对于函数声明来说,习惯放在头文件中,并且一个函数只声明一次,但是多次声明同一个函数的也是合法的。不过需注意,在给定的作用域中一个形参只能被赋予一次实参,也就是说,函数的后续声明只能为之前那些没有默认值的形参添加默认实参,而且该形参右侧的所有形参必须都有默认值。
int f(int a,int b,int c,int d); //第一次声明
int f(int a,int b,int c,int d=0); //第二次声明,添加默认实参d
int f(int a,int b,int c=1,int d); //第三次声明,注意此处不能再次赋予形参d一个值
int f(int a=4,int b=3,int c,int d); //第四次声明,注意一旦形参a赋值后,其后所有值都必须有默认值,且不能重复赋值已有实值的形参
//函数定义,注意在定义出不能再次给已有默认值的形参赋值
int f(int a,int b,int c,int d){/**/};
//虽然函数可以多次声明,但是只能定义一次。
int ff(int m=0,int n=1,int p=2){/**/};
综上,只需记住默认实参只允许定义一次。
通常,应在在函数声明中指定默认实参,并将该声明放在合适的头文件中,而且还需考虑参数位置,确保拥有默认值的形参后面的所有形参都有默认值。
一旦多次定义同一个形参编译器就会报错:重定义默认参数。
我是夏虫爱语冰,转载请注明本文链接:https://blog.csdn.net/Love_Point/article/details/109322843,注意百度和各类采集站皆不可信,搜索时请谨慎甄别。同时由于文章一般都有时效性,本人可能会不定期对自己的博文进行修正和更新,因此敬请访问出处以查看最新版本。