缺省参数是为函数的参数指定一个缺省值,调用该函数时,如果没有指定实参则采用该形参的缺省值。
void Test(int a = 10) {cout << a << endl;
}int main() {Test(); // 不传参默认10Test(100); // 指定传参100return 0;
}
缺省参数分为全缺省和半缺省。
- 全缺省
void Test(int a = 10, int b = 20, int c = 30){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;}
- 半缺省
void Func(int a, int b = 10, int c = 20){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;}
需要注意的是:
- C语言不支持缺省函数;
- 缺省值必须是常量或者全局变量;
- 缺省参数不能在函数声明和定义中同时出现,这是因为可能在声明和定义中给的缺省值不一样,编译器无法选择使用哪一个缺省值,所以缺省值在声明或定义中任意一处给即可;以下是错误示范:
//a.h
void Func(int a = 10);// a.cpp
void Func(int a = 20)
{// ...
}
- 半缺省参数必须从右至左依次给出,不能中间有某个参数没有缺省值,这是因为这种函数没办法调用。以下是错误示范:
void Func(int a, int b = 10, int c, int d = 20){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;cout<<"d = "<<d<<endl;}
Func(25); // 不能调用,因为形参c没有值
而如果是正确的半缺省,只要传了至少一个参数,怎样调用都可以:
void Func(int a, int b = 10, int c = 15, int d = 20){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;cout<<"d = "<<d<<endl;}
Func(5);
Func(5, 25);
Func(5, 25, 30);
Func(5, 25, 30, 40);