Cpp-Default_Parameter

60 阅读2分钟

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 函数在一个源文件中实现,可以直接使用(无需链接过程,且编译阶段已经识别到缺省参数)。但如果将函数封装到其它头文件中,通过引用头文件调用函数,则会在编译时发生错误(参数和声明不匹配),会出现缺少参数的报错。


总结

  • 参数必须从右往左连续缺省。
  • 传参必须从左往右连续传参。
  • 一般在声明中指定缺省参数。