【C++入门】缺省参数


1 缺省参数

1.1 缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。 在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参。

示例代码:

#include <iostream>

using namespace std;

void Func(int a = 0) {
    
    
	cout << a << endl;
}

int main() {
    
    
	Func();//没有传参时,使用参数的缺省值
	Func(10);//传参时,使用指定的实参
	return 0;
}

运行结果:

示例运行结果

如上所示:缺省参数的缺省值就好比一个一直存在的“备胎”。函数 Func 中含缺省参数 a ,其缺省值为0。在第一次调用函数时,我们没有传参,因此使用参数的缺省值进行输出;在第二次调用函数时,传入了常量值10,因此函数使用传入的参数值进行输出。


1.2 缺省参数分类

  • 全缺省参数

示例代码:

#include <iostream>

using namespace std;

void Func(int a = 10, int b = 20, int c = 30) {
    
    
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

int main() {
    
    
	Func(1, 2, 3);
	Func(1, 2);
	Func(1);
	Func();
	return 0;
}

运行结果:

示例运行结果

说明: 所谓全缺省参数,顾名思义就是函数的所有参数都具有缺省值。如示例中所示,若采用全缺省参数,函数调用时,可以选择传全部参数,可以选择传部分参数,也可以不传参使用参数缺省值。但注意:调用函数时必须从左往右连续给缺省参数传参,不能间隔传参(或者说必须从右往左连续使用缺省值),如 Func(, 2,) 与 Func(, , 3) 的调用方法都是错误的。

  • 半缺省参数(部分缺省)

示例代码:

#include <iostream>

using namespace std;

void Func(int a, int b = 20, int c = 30) {
    
    
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

int main() {
    
    
	Func(1, 2, 3);
	Func(1, 2);
	Func(1);
	return 0;
}

运行结果:

示例运行结果

说明: 所谓半缺省,并不是指给一半的参数设置缺省值,实际是只给部分参数设置缺省值。如示例中所示,函数 Func 中除了参数 a ,其余参数均设置有缺省值,此时调用函数,对于没设置缺省值的参数,必须进行传参,其余参数可使用缺省值。需要注意的是:同样,对于半缺省的参数,调用函数时也必须从右往左连续使用缺省值。且在声明和定义函数时也必须从右往左连续设置缺省参数的缺省值,如 void Func(int a = 10, int b, int c = 30); 的函数声明方法就是错误的。


1.3 缺省参数使用注意

  1. 缺省参数不能在函数声明和定义中同时出现

如:在test.h中声明函数 void Func(int a = 10, int b = 20, int c = 30); ,在test.cpp中定义函数 void Func(int a = 10, int b = 20, int c = 30){} ,运行时将会出现如下图中的报错,即使函数的声明和定义设置的缺省参数的缺省值是一样。而且如果二者可以同时出现的话,若恰巧两个位置提供的缺省值不同,那编译器就无法确定到底该用哪个缺省值。

错误说明

考虑到我们的代码中包含的 .h 头文件中通常是函数的声明,如果函数的声明和定义不在同一个文件中,则应在函数声明时设置缺省参数的缺省值,定义的时候则不需要再重复设置了。

  1. 缺省值必须是常量或者全局变量

  2. C语言的编译器不支持缺省参数


以上是我对C++中缺省参数的一些学习记录总结,如有错误,希望大家帮忙指正,也欢迎大家给予建议和讨论,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_67216978/article/details/128805240