缺省参数——C++

缺省参数——C++,第1张

缺省参数定义:

缺省参数是在函数调用时为函数的参数指定一个缺省值,在调用函数时,如果没有指定实参则采用该形参的缺省值,否则采用指定的实参(缺省值必须是常量或者全局变量)

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相当于没有传参
}
缺省参数分类:
  1. 全缺省参数
    函数的形参都有指定的缺省值
void Func(int a = 10, int b = 20, int c = 30)
{
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	cout<<"c = "<<c<<endl;
}
  1. 半缺省参数
    函数的形参部分有指定的缺省值
void Func(int a, int b = 10, int c = 20)
{
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	cout<<"c = "<<c<<endl;
}
注意:

在函数的定义和声明中,因为参数的缺省值可能不同,所以缺省值不能同时出现在定义和声明中

两种正确的使用:

  1. 只出现在定义
.cpp
int Div(int a=10, int b=5)
{
	return a - b;
}
.h
int Div(int a, int b );
  1. 只出现在声明
.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;
}

可以对函数的参数设置默认值,当需要改变时可以通过使其有指定实参来改变形参

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/2991534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存