Default_Parameter
什么是缺省参数
缺省参数又被称作默认参数,即在实现函数传参时,可以实现即使不传参,也有默认的缺省参数作为实参的补充,实现对函数传参的省略。
int func(int a = 0) { return a; }
int main()
{
std::cout << func() << " ";
std::cout << func(2022) << " ";
return 0;
}
程序的输出结果为:0 2022
可以看出,若不传参,默认参数会充当实参传给形参,类似于将:func() 替换成 func(0);而传参时,直接把所传实参传给形参。
缺省参数的用法
缺省参数必须从右往左连续缺省
int func(int a, int b, int c = 0) { return 0; }
int func(int a, int b = 0, int c = 0) { return 0; }
int func(int a = 0, int b = 0, int c = 0) { return 0; }
在有三个参数时,这三种定义下的缺省参数是合法的,不可出现类似于:
int func(int a = 0, int b, int c = 0) { return 0; }
int func(int a = 0, int b = 0, int c) { return 0; }
int func(int a, int b, int c = 0) { return 0; }
这样的情况。
传参必须从左往右连续传参
例如这样的情况:
int func(int a, int b = 0, int c = 0) { return 0; }
如果需要对 c 传参,那么 a 和 b 必须传参。
以上的情况,若函数中所有的参数都有缺省,则称之为 全缺省,若并非所有参数都有缺省值,则称之为 半缺省。
缺省参数的位置
缺省参数不能同时位于函数的声明和定义中,这将会产生矛盾,编译器会分不清使用谁的缺省参数:
int func(int a = 0);
int func(int a = 0) {return a;}
以上写法是错误的。
一般而言在函数的声明中指定缺省参数,对于以上情况,函数和 main 函数在一个源文件中实现,可以直接使用(无需链接过程,且编译阶段已经识别到缺省参数)。但如果将函数封装到其它头文件中,通过引用头文件调用函数,则会在编译时发生错误(参数和声明不匹配),会出现缺少参数的报错。
总结
- 参数必须从右往左连续缺省。
- 传参必须从左往右连续传参。
- 一般在声明中指定缺省参数。