缺省参数的概念
缺省参数是声明或定义函数时给函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
- 通俗来讲,你在定义或声明函数时,可以为函数的一个或多个参数指定默认值,这个默认值就是缺省值。
代码示例:Func的参数(这里的参数是指Func的参数整体/形参列表,不是某一个参数/形参)就是缺省参数。为Func的参数a指定了缺省值1。
int Func(int a = 1)
{
cout << a << endl;
}
int main()
{
Func(233);//给a指定了实参,使用实参的值,输出233
Func();//未给a指定实参,采用a的缺省值,输出1
return 0;
}
缺省参数的分类
全缺省参数
全缺省参数就是为函数的所有参数都指定了缺省值。
//Func的参数是全缺省参数
void Func(int a = 1, int b = 2, int c = 3)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
半缺省参数
半缺省参数就是为函数的一部分参数指定了缺省值。
//Func1和Func2的参数都是半缺省参数
void Func1(int a, int b, int c = 3)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
void Func2(int a, int b = 2, int c = 3)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
缺省参数的使用规则
- 半缺省参数的缺省值必须从右往左依次给出(必须集中在形参列表的右边)
- 传实参给缺省参数时,必须从左往右依次给出(必须集中在参数列表的左边)
- 缺省值不能在函数声明和定义中同时出现
- 缺省值必须是常量或全局变量
- C语言不支持(编译器不支持)
代码示例:
[代码1]缺省参数的缺省值需集中在参数列表的右边
//缺省参数的缺省值必须集中在形参列表的右边
//正确示例
void Func1(int a = 1, int b = 2, int c = 3);
void Func2(int a, int b, int c = 3);
void Func3(int a, int b = 2, int c = 3);
//错误示例
void Func4(int a = 1, int b, int c = 3);//不符合语法,缺省值不能间隔着给出
void Func5(int a = 1, int b = 2, int c);//不符合语法,缺省值必须集中在形参列表的右边
[代码2]传实参给缺省参数时,传递实参必须集中在参数列表的左边
void Func(int a = 1, int b = 2, int c = 3)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
int main()
{
//传递实参时,实参必须集中在参数列表的左边
//正确示例
Func(10, 1, 6);
Func(11, 12);
Func(13);
//错误示例
Func(4, , 4);//不符合语法,实参不能间隔着给
Func( , 7, 7);//不符合语法,实参必须集中在参数列表的左边
return 0;
}
[代码3]缺省值不能在函数声明和定义中同时出现,推荐在声明时给出缺省值。这条语法规则实际上是为了避免声明和定义所给出缺省值不同而造成编译器无法识别缺省值的问题。
//test.h下有
void Func1(int a = 1, int b = 2, int c = 3);
void Func2(int a, int b, int c = 3);
void Func3(int a, int b = 2, int c = 3);
//正确示例:test.cpp下有
void Func1(int a, int b, int c)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
void Func2(int a, int b, int c)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
void Func3(int a, int b, int c)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
//错误示例:test.cpp下有:
//报错,重定义缺省参数
void Func1(int a = 1, int b = 2, int c = 3)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
void Func2(int a, int b = 2, int c = 3)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
void Func3(int a, int b, int c = 3)
{
cout << a << " ";
cout << b << " ";
cout << c << endl;
}
作者言
以上为我对C++缺省参数的理解,若文中有理解不到位的地方,欢迎大家留言指正~