1.概念
缺省参数可以理解为默认的意思,在声明或定义一个函数时给函数的参数指定一个默认的值,在调用这个函数时如果不传入参数,那函数就使用默认的参数值,若调用时传入了参数,那就用传入的值,举个栗子:
#include<iostream>
using namespace std;
void func(int a = 10)
{
cout << a << endl;
}
int main()
{
func(); // 不传参 则用缺省值
func(100); //传参,用传参值
return 0;
}
调用了两次func函数,运行结果如下:
2.分类
1.全缺省参数
全缺省参数:顾名思义,在声明或定义这个函数时必须为每一个参数定义默认的初始值,这样在调用这个函数的时候参数都有默认值,举个栗子:
#include<iostream>
using namespace std;
//全缺省参数
void func(int a = 10 , int b = 100 , int c = 1000)
{
cout << a << endl<< b << endl << c << endl;
}
int main()
{
func(); // 不传参 则用缺省值
func(20 , 200 , 2000); //传参,用传参值
return 0;
}
传参和不传参后,两次函数调用的运行结果如下:
不过有一点要注意,当函数调用是部分传参时,参数由左向右一次传值,举个栗子:
#include<iostream>
using namespace std;
//全缺省参数
void func(int a = 10 , int b = 100 , int c = 1000)
{
cout << a << endl<< b << endl << c << endl;
}
int main()
{
func(); // 不传参 则用缺省值
func(20 , 200 , 2000); //传参,用传参值
func(11); //部分传参 ,由左向右一次传值
func(11 , 111); //部分传参 ,由左向右一次传值
func(11 , 111 , 1111); //部分传参 ,由左向右一次传值
return 0;
}
上面的代码我有只传了一个参数的,也有全部传参的,由结果可以看出缺省参数是由最左边向右依次传值的:
2.半缺省参数
半缺省参数:顾名思义,就是命名或定义一个函数时,只有一部分参数是设置默认值的,而没有设置默认值的部分在调用的时候必须传参,调用的值首先传值到未定义默认值的参数,再由左向右依次传值,并且 ,未定义默认值的参数必须从第一个参数开始,举个栗子:
#include<iostream>
using namespace std;
//半缺省参数
void func(int a , int b = 100 , int c = 1000)
{
cout << a << endl << b << endl << c << endl;
}
int main()
{
func(10); //至少传一个值,为未定义默认值的参数值
func(11, 111); // 从第一个缺省参数开始依次向右传值
func(11, 111, 1111);
return 0;
}
3.注意事项
- 半缺省参数必须从右往左依次给出,不能间隔传值
- 缺省参数不能在函数声明和定义中同时出现,一般是声明定义缺省参数,定义不设置缺省参数,否则编译器将不清楚到底应该用哪一个缺省值
- 缺省值必须是常量或者全局变量
完结~❀❀❀