C++初阶——缺省参数

前言:在C语言中,声明或定义函数时形参仅为类型和变量名组成,而在C++中我们可以在声明和定义函数时为参数指定一个缺省值。
缺省参数在后面学习默认成员函数中的构造函数和析构函数也很重要。

这里写目录标题

  • 缺省参数
    • 1.什么是缺省参数
    • 2.全缺省参数
    • 3.半缺省参数
    • 4.缺省参数的使用场景
  • 总结几个缺省参数的重点:

缺省参数

1.什么是缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则使用该形参的缺省值,否则使用该实参。
重中之重:缺省参数不能声明和定义同时给,因为假如声明和定义给的缺省值不一样,编译器就分不清到底该使用哪一个缺省值。因此C++规定,声明给缺省值,定义不给。
缺省值必须是常量或者全值变量

如下所示:

void Func(int a = 10)
{
	cout << a << endl;
}
int main()
{
	Func();   //  10
	Func(5);  //  5
	return 0;
}

2.全缺省参数

顾名思义,就是给函数的参数都指定缺省值
需要注意的是:实参只能从左往右给。

C++初阶——缺省参数_第1张图片

3.半缺省参数

半缺省参数并不是指给函数一半的参数指定缺省值,毕竟假如有3个参数该怎么办呢?总不能给1.5个参数指定缺省值吧(笑)
半缺省参数指的是给函数的部分参数指定缺省值,但不是全缺省参数。因此半缺省至少传一个实参,而全缺省可以一个实参都不传。
这里有一个重点:必须从右往左给参数指定缺省值

C++初阶——缺省参数_第2张图片

4.缺省参数的使用场景

这里举个例子,给读者一点启发。

在C语言实现栈中,我们一般开始时都是给栈开辟4个动态内存空间,但是假如我们需要开辟10个呢,或许有读者会说可以在其它接口扩容,但是扩容是要代价的。或者有读者会说可以使用宏定义来控制初始开辟的动态内存空间,但是假如我们创建了两个栈,一个需要开辟10,一个需要开辟100动态内存空间呢?
这种情况下,缺省参数就有了用武之地。

struct Stack
{
	int* a;
	int capacity;
	int top;
};

//void StackInit(Stack* ST) 常规写法
void StackInit(Stack* ST, int n = 4) //多创建一个n变量,给缺省值
{
	ST->a = (int*)malloc(sizeof(int) * n);
	ST->top = 0;
	ST->capacity = 0;
}
int main()
{
	Stack s1, s2;
	StackInit(&s1, 10); //初始化要多少就给多少,是不是很方便?
	StackInit(&s2, 100);
	return 0;
}

总结几个缺省参数的重点:

1.缺省值不能声明和定义同时给。
2.声明给,定义不给。
3.实参只能从左往右给。
4.缺省值必须从右往左给函数的参数。
5.缺省值只能是常量或者全局变量。

文末BB:对哪里有问题的朋友,尽管在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能动动你们发财的小手给点点赞和关注.
C++初阶——缺省参数_第3张图片

你可能感兴趣的:(C++基础语法,c++,开发语言,c)