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

news2024/11/23 7:23:47

在这里插入图片描述

文章目录

    • 缺省参数的概念
    • 缺省参数的分类
      • 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.coloradmin.cn/o/892844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 安装 audit 日志审计插件

下载 我的MySQL版本是 5.7.37的&#xff0c;用的是日志审计插件&#xff08;audit-plugin&#xff09;是1.1.10的&#xff0c;大家可以对应自己版本去下载。 https://github.com/trellix-enterprise/mysql-audit/releases 配置 1、进入到/opt目录下载 audit&#xff0c;可以…

《Zookeeper》源码分析(十三)之 投票管理器

目录 QuorumVerifier数据结构构造函数containsQuorum() SyncedLearnerTracker功能 QuorumVerifier QuorumVerifier用于保存集群选举服务器信息以及选举期间判断投票是否过半&#xff0c;它的创建过程如下&#xff1a; 默认创建的是它的实现类QuorumMaj 数据结构 构造函数 从…

ElasticSearch的客户端操作

ElasticSearch的客户端操作 1、客户端介绍 官方文档地址&#xff1a; https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 实际开发中&#xff0c;有多种方式操作Elasticsearch&#xff1a; 客户端工具&#xff1a;发送http请求(RESTful风格)操作…

C语言入门_Day 6布尔数与比较运算

目录 前言 1.布尔数 2.比较运算 3.易错点 4.思维导图 前言 除了算术计算以外&#xff0c;编程语言中还会大量使用比较运算&#xff0c;并会根据比较运算的结果是“真”还是“假”&#xff0c;来执行不同的代码。 当你想买一杯奶茶&#xff0c;准备支付的时候&#xff0c;支…

Reis过期删除策略

介绍 在Redis中&#xff0c;我们可以为键值对设置有效期&#xff0c;现在面临一个问题&#xff0c;如果一个键值对过期了&#xff0c;那么我们应该怎么删除呢&#xff1f; 我们目前有三种方案&#xff1a; 定时删除&#xff1a;在设置键的过期时间的同时&#xff0c;为此键设…

特殊链表(循环单链表,循环双链表,静态链表)

目录 1.循环单链表的初始化 2.循环双链表 3. 静态链表 (1)静态链表的初始化 (2)静态链表的插入 1.循环单链表的初始化 typedef int ElemType; typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;bool InitList(LinkList &L) {L(LNode*)malloc(…

【兔子王赠书第1期】数据结构与算法有必要区分嘛?

文章目录 数据结构与算法有必要区分嘛好书推荐《数据结构与算法&#xff08;Python语言实现&#xff09;》粉丝福利 | 评论免费送书 数据结构与算法有必要区分嘛 数据结构与算法&#xff0c;是计算机科学的基础课程&#xff0c;对于初学者来说&#xff0c;常常会有些困惑&…

企业微信电脑端开启chrome调试

首先&#xff1a; Mac端调试开启的快捷键&#xff1a;control shift command d Window端调试开启的快捷键: control shift alt d 这边以Mac为例&#xff0c;我们可以在电脑顶部看到调试的入口&#xff1a; 然后我们点击 『浏览器、webView相关』菜单&#xff0c;勾选上…

【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

步骤 1. 下载 Print.js 插件 npm install print-js --save2.main.js文件中导入 Print.js 插件 import print from print-js页面使用 需求&#xff1a;打击打印按钮&#xff0c;文字内容以及表格中的内容 vue Print.js打印页面样式不出现 解决方案 加上这句就好了&#xff…

“代码驭宠而行“:探索Python的魔法世界,开启编程奇幻之旅!

文章目录 &#x1f340;引言&#x1f340;第一步&#xff1a;安装Python和开发环境&#x1f340;第二步&#xff1a;掌握基本语法&#x1f340;第三步&#xff1a;使用Python库和模块&#x1f340;第四步&#xff1a;实践项目和练习&#x1f340;第五步&#xff1a;学习进阶主题…

vue使用jsplumb 流程图

安装jsPlumb库&#xff1a;在Vue项目中使用npm或yarn安装jsPlumb库。 npm install jsplumb 创建一个Vue组件&#xff1a;创建一个Vue组件来容纳jsPlumb的功能和呈现。 <template><div style"margin: 20px"><div style"margin: 20px">&l…

20款美规奔驰GLS450更换AMG GLS63原厂刹车卡钳,刹车效果强悍无比

对于M.Benz的车迷来说&#xff0c;AMG必定是他们的圣物&#xff0c;经过AMG改装的成品无一不是拥有动力强横&#xff0c;目操控性、舒适性都能够兼备的。下面所介绍的这套制动系统&#xff0c;便是由AMG出品的大六活塞卡钳及大直径开孔刹车碟&#xff0c;所组成的制动套件。

UE4/5Niagara粒子特效学习(使用UE5.1,适合新手)

目录 创建空模板 创建粒子 粒子的基础属性 粒子的生命周期 颜色 大小设置 生成的位置 Skeletal Mesh Location的效果&#xff1a; Shape Location 添加速度 添加Noise力场 在生成中添加&#xff1a; 效果&#xff1a; ​编辑 在更新中添加&#xff1a; 效果&…

CSS变形与动画(三):animation帧动画详解(用法 + 四个例子)

文章目录 animation 帧动画使用定义例子1 字母例子2 水滴例子3 会动的边框例子4 旋转木马 animation 帧动画 定义好后作用于需要变化的标签上。 使用 animation-name 设置动画名称 animation-duration: 设置动画的持续时间 animation-timing-function 设置动画渐变速度 anim…

[C++] 迭代器失效示例

迭代器失效&#xff1a; 如果迭代器失效&#xff0c;那么就不能再使用这个迭代器。 如果使用&#xff0c;那么结果是未定义的。 我们以模拟实现vector的insert为例。 一、野指针 1、insert实现 这里的pos会变成野指针。 当扩完容后&#xff0c;由于空间的改变&#xff0…

Docker 网络之 ipvlan 和 macvlan

Docker ipvlan 和 macvlan 引言 本文讲解了Docker 网络模式中的 ipvlan 和 macvlan 的区别,目前自己在生产环境中使用的 ipvlan 模式非常问题.也解决了实际业务问题. IPvlan L2 mode example ipvlan 无需网卡混杂模式 , 运行如下命令后可以生成一个 vlan 子接口 , 会和主网…

不懂瞎指挥,就会闯大祸

不懂瞎指挥&#xff0c;就会闯大祸 【安志强趣讲《孙子兵法》第12讲】 【原文】 故君之所以患于军者三&#xff1a;不知军之不可以进而谓之进&#xff0c;不知军之不可以退而谓之退&#xff0c;是谓縻军&#xff1b; 【注释】 患&#xff0c;危害、贻害。 縻&#xff08;m&…

算法通关村第十关 | 归并排序

1. 归并排序原理 归并排序&#xff08;MERARE-SORT&#xff09;简单来说就是将大的序列先视为若干个比较小的数组&#xff0c;分成比较小的结构&#xff0c;然后是利用归并的思想实现的排序方法&#xff0c;该算法采用经典的分治策略&#xff08;分就是将问题分成一些小的问题分…

【Unity每日一记】计时器——各种方法的实现

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…