【C++ 记忆站】缺省参数

news/2024/7/23 9:01:14 标签: c++, 开发语言, C++ 记忆站

在这里插入图片描述

文章目录

    • 缺省参数的概念
    • 缺省参数的分类
      • 1、全缺省参数
      • 2、半缺省参数
    • 缺省参数实际应用场景

在这里插入图片描述

缺省参数的概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参

正常调用一个函数

//正常调用一个函数,实参传递给形参
void func(int i)
{
	cout << i << endl;
}

int main()
{
	func(1);
	func(2);
	func(3);
}

加入缺省参数

缺省参数就相对一个备胎,实参没传值过来,那么形参就用缺省参数给的值
打印结果:
在这里插入图片描述

void func(int i = 0)
{
	cout << i << endl;
}

int main()
{
	func(1);
	func(2);
	func();
}

缺省参数的分类

1、全缺省参数

//全缺省参数
void func(int a = 10,int b =20,int c = 30)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

int main()
{
	func();
	cout << endl;
	func(1);
	cout << endl;
	func(1,2);
	cout << endl;
	func(1, 2, 3);
	cout << endl;

	return 0;
}

打印结果:
在这里插入图片描述
注意千万不能这样写,这是c++语法不支持的
在这里插入图片描述


2、半缺省参数

//半缺省参数
void func(int a, int b = 20, int c = 30)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

int main()
{
	cout << endl;
	func(1);
	cout << endl;
	func(1, 2);
	cout << endl;
	func(1, 2, 3);
	cout << endl;

	return 0;
}

打印结果
在这里插入图片描述
注意必须从左往右连续缺省
在这里插入图片描述
千万不能这样
在这里插入图片描述


缺省参数实际应用场景

举一个例子,利用 缺省参数 实现数据结构中的 栈(Stack) 初始化

之前用C语言来实现这个初始化是这样的

struct Stack
{
	int* a;
	int top;//栈顶
	int capacity;//栈的容量
};


void StackInit(struct Stack* ps)
{
	ps->a = NULL;

	//pst->top = -1;   // top 指向栈顶数据
	ps->top = 0;   // top 指向栈顶数据的下一个位置

	ps->capacity = 0;
}

这里的capacity(容量) 就直接初始化为0了,因为在之前栈实现是动态开辟容量空间的,当一个元素入栈,就会先检查空间是否足够,如果不够就再来增加容量,这种情况是当你不知道要入多少元素到栈里面去,你只能每次入栈前就先检查一下容量是否足够,如果不够往往容量空间是成倍数的增加的,当你不在需要入元素进栈就会产生一定的空间浪费


现在这种利用缺省参数的形式,在你确认需要入多少个元素的情况下直接把capacity定义为缺省参数,例如下面的方式:

struct Stack
{
	int* a;
	int top;//栈顶
	int capacity;//栈的容量
};

void StackInit(struct Stack* ps, int capacity = 4)
{
	ps->a = (int*)malloc(sizeof(int) * capacity);
	ps->top = 0;
	ps->capacity = capacity;
}

int main()
{
	struct Stack st;
	StackInit(&st, 100);
}

现在知道一定会插入100个数据,就可以显示传参数100,提前开好空间,避免空间扩容这个步骤,减少空间的浪费


在这里插入图片描述


http://www.niftyadmin.cn/n/4947759.html

相关文章

【java毕业设计】基于Spring Boot+Vue+mysql的论坛管理系统设计与实现(程序源码)-论坛管理系统

基于Spring BootVuemysql的论坛管理系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于Spring BootVuemysql的论坛管理系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取…

Redis进阶篇 - 04发布订阅、布隆过滤器、过期策略、回收机制、管道...核心知识原理

Redis底层原理篇&#xff0c;​让学习绚丽多彩起来&#xff01;&#xff01;&#xff01;&#xff08;需要原图私信&#xff09;

深入浅出通过PHP封装根据商品ID获取抖音商品详情数据方法

抖音商城商品详情数据是指商品在抖音商城中的展示信息&#xff0c;包括商品的标题、描述、价格、图片等。商家可以通过商品详情数据了解用户对商品的兴趣和需求&#xff0c;从而进行优化和调整。 商品详情数据还可以帮助商家评估商品的销售情况和市场竞争力&#xff0c;为制定…

如何优化网站性能以提高用户体验

随着互联网的发展&#xff0c;越来越多的企业和个人开始建立自己的网站。然而&#xff0c;许多网站在面对大量访问者时&#xff0c;会出现性能瓶颈&#xff0c;导致用户体验下降。本文将介绍一些优化网站性能的方法&#xff0c;以提高用户体验。 优化图片 图片是网站中不可或…

End-to-End Object Detection with Transformers

DERT 目标检测 基于卷积神经网络的目标检测回顾DETR对比Swin Transformer摘要检测网络流程DERT网络架构编码器概述解码器概述整体结构object queries的初始化Decoder中的Muiti-Head Self-AttentionDecoder中的Muiti-Head Attention 损失函数解决的问题 基于卷积神经网络的目标检…

实现简单的element-table的拖拽效果

第一步&#xff0c;先随便创建element表格 <el-table ref"dragTable" :data"tableData" style"width: 100%" border fit highlight-current-row><el-table-column label"日期" width"180"><template slot-sc…

Spring Clould 负载均衡 - Ribbon

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; Ribbon-负载均衡原理&#xff08;P14&#xff09; 具体实现时通过LoaBalanced注解实现&#xff0c;表示RestTemplate要被Ribbon拦截处理 orderservice调用user时候&#xff0c…

30.Netty源码服务端启动主要流程

highlight: arduino-light 服务端启动主要流程 •创建 selector •创建 server socket channel •初始化 server socket channel •给 server socket channel 从 boss group 中选择一个 NioEventLoop •将 server socket channel 注册到选择的 NioEventLoop 的 selector •…