目 录
- 1 缺省参数
- 1.1 缺省参数概念
- 1.2 缺省参数分类
- 1.3 缺省参数使用注意
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 缺省参数使用注意
- 缺省参数不能在函数声明和定义中同时出现
如:在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
头文件中通常是函数的声明,如果函数的声明和定义不在同一个文件中,则应在函数声明时设置缺省参数的缺省值,定义的时候则不需要再重复设置了。
-
缺省值必须是常量或者全局变量
-
C语言的编译器不支持缺省参数
以上是我对C++中缺省参数的一些学习记录总结,如有错误,希望大家帮忙指正,也欢迎大家给予建议和讨论,谢谢!