缺省参数是在函数调用时为函数的参数指定一个缺省值,在调用函数时,如果没有指定实参则采用该形参的缺省值,否则采用指定的实参(缺省值必须是常量或者全局变量)
int Add(int a = 10, int b = 5)
{
return a + b;
}
int main()
{
cout << Add() << endl;//a=10,b=5//没有传参采用默认值
cout << Add(1) << endl;//a=1,b=5//传参采用指定实参
}
缺省参数传指定的实参是从左到右传的,为形参指定缺省值需要从右向左指定
int Add(int a , int b = 5,int c=2,int d=1)
{
return a + b + c + d;
}
int main()
{
//cout << Add() << endl;错误,当形参没有指定的缺省值,必须要传对应实参
cout << Add(2) << endl;//a=2,b=5,c=2,d=1
cout << Add(2,3) << endl;//a=2,b=3,c=2,d=1
}
错误例子:
int Add(int a , int b = 5,int c,int d=1)
{
return a + b + c + d;
}
int main()
{
//错误示范
cout << Add(2,,3) << endl;//不能通过,,来间隔传参,只能按照顺序从左到右传参
cout << Add(2,3) << endl;//不会默认跳过b来把值传给形参c,c相当于没有传参
}
缺省参数分类:
- 全缺省参数
函数的形参都有指定的缺省值
void Func(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;
}
注意:
在函数的定义和声明中,因为参数的缺省值可能不同,所以缺省值不能同时出现在定义和声明中
两种正确的使用:
- 只出现在定义
.cpp
int Div(int a=10, int b=5)
{
return a - b;
}
.h
int Div(int a, int b );
- 只出现在声明
.cpp
int Div(int a, int b)
{
return a - b;
}
.h
int Div(int a=10, int b=5 );
错误示范:
错在定义和声明中都出现缺省值
.cpp
int Div3(int a = 10, int b = 5)
{
return a - b;
}
.h
int Div3(int a = 10, int b = 5);
.cpp
int Div4(int a , int b = 5)
{
return a - b;
}
.h
int Div4(int a = 10, int b );
用处:
typedef int SLDateType;
typedef struct SeqList
{
SLDateType* a;
size_t size;
size_t capacity; // unsigned int
}SeqList;
void _SeqListInit(SeqList* ps,int num=4)
{
assert(ps);
ps->size = 0;
int* tmp = (int*)malloc(sizeof(int) * num);
if (tmp == NULL)
{
perror("malloc fail");
exit(-1);
}
ps->a = tmp;
ps->capacity = num;
}
int main()
{
SeqList a;
_SeqListInit(&a);//通过缺省值默认初始化4个数据的空间
//_SeqListInit(&a,100);//有指定的实参,则初始化100个空间
return 0;
}
可以对函数的参数设置默认值,当需要改变时可以通过使其有指定实参来改变形参
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)