在 C 语言中,函数没有指定参数列表,默认可以接收任意多个参数,但是在 C++ 中,因为严格的参数类型检测,所以没有参数列表的函数,默认为是void类型,不接收任何参数。这将导致在 C++ 中,如果忘记给函数指定参数列表,那么该函数就会无法进行传参操作,这也许并不是我们用户定义函数时的初衷。所以在 C++ 中我们就引出了缺省参数 这一概念。
一、什么是缺省参数?
缺省参数: 就是在 声明 或 定义 函数时为函数的参数指定一个默认值。在调用函数时,如果没有指定实参则采用该默认值,否者使用指定的实参。
了解了缺省参数的概念,那么接下来就来看一段简单的代码:
#include <iostream>
using namespace std;
void TestFunc(int a = 0) {
cout<<a<<endl;
}
int main() {
TestFunc(); // 没有传参时,使用参数的默认值
TestFunc(5); // 传参时,使用指定的实参
return 0;
}
第一个 test 函数中,输出的结果是 1。
第二个 test 函数输出结果是 10。
二、缺省参数分类
1. 全缺省参数
概念: 函数的所有参数都有默认值,如果没有手动传参,那么编译器会使用默认参数列表中的参数。但是这里需要注意的是:如果传参时只传了部分参数,那么该值会被从左至右匹配。
来看一段代码:
#include <iostream> using namespace std; void test(int a = 1, int b = 2, int c = 3) { cout << a << " " << b << " " << c << endl; } int main() { test(); test(10); test(10, 20); test(10, 20, 30); return 0; }
程序执行结果如下:
2. 半缺省参数
概念: 函数的部分参数有默认值。如:
#include <iostream>
using namespace std;
void test(int a, int b = 1, int c = 2) {
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
}
int main() {
test(10); // 对于半缺省参数,没有缺省值得参数在调用时必须传参
return 0;
}
运行结果:
注意:
- 半缺省参数必须 从右往左 依次给出,不能间隔着给
- 缺省参数不能在函数声明和定义中同时出现。如:
// a.h void test(int a = 3); // a.c void test(int a = 5); // 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同, // 那编译器就无法确定到底该用哪个 缺省值。
- 缺省值必须是常量或者全局变量
- C语言不支持半缺省参数的使用(编译器也不支持)