缺省参数——C++

缺省参数定义:

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

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;
}

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

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小奔同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值