13.9 函数的默认参数
c++在声明函数原型的时侯可为一个或者多个参数指定默认(缺省)的参数值,当函数调用的时候如果没有指定这个值,编译器会自动用默认值代替。
void TestFunc01(int a = 10, int b = 20)
{
cout<<"a + b = "<<a+b<<endl;
}
//注意点:
//1. 形参b设置默认参数值,那么后面位置的形参c也需要设置默认参数
void TestFunc02(int a,int b = 10,int c = 20){}
//2. 如果函数声明和函数定义分开,函数声明设置了默认参数,函数定义不能再设置默认参数
void TestFunc03(int a = 0, int b = 0);
void TestFunc03(int a,int b){
}
int main(){
//1. 如果没有传参数,那么使用默认参数
TestFunc01();
//2. 如果传一个参数,那么第二个参数使用默认参数
TestFunc01(100);
//3. 如果传入两个参数,那么两个参数都使用我们传入的参数
TestFunc01(100,200);
return 0;
}
判断以下默认参数设置是否正确:
int func(int a, int b, int c=10);//正确
int func(int a, int b = 20,int c);//错误 c必须默认参数
int func(int a = 10,int b, int c);//错误 b c必须默认参数
int func(int a, int b=10, int c=20);//正确
int func(int a=10,int b,int c=20);//错误 b必须默认参数
int func(int a=10,int b=20,int c=20);//正确
默认参数和函数重载同时出现 一定要注意二义性
void func(int x)
{
cout<<"A:int x="<<x<<endl;
}
void func(int x,int y=10)
{
cout<<"B:int x="<<x<<" y="<<y<<endl;
}
int main()
{
func(10,20);//ok
func(20);//err 产生二义性
}
13.10 占位参数
c++在声明函数时,可以设置占位参数。占位参数只有参数类型,而没有参数名。一般情况下,在函数内部无法使用占位参数。
void TestFunc01(int a,int b,int){
//函数内部无法使用占位参数
cout<<"a + b = "<<a+b<<endl;
}
//占位参数也可以设置默认值
void TestFunc02(int a,int b,int = 20){
//函数内部依旧无法使用占位参数
cout<<"a+b="<<a+b<<endl;
}
int main(){
//错误调用,占位参数也是参数,必须传参数
//TestFunc01(10,20);
//正确调用
TestFunc01(10,20,30);
//正确调用
TestFunc02(10,20);
//正确调用
TestFunc02(10,20,30);
return 0;
}
什么时候用,在后面我们要讲的操作符重载的后置++要用到这个。