c过渡c++应知应会(2)

  • 1.缺省参数
  • 2.函数重载
  • 3.引用
  • 4.inline

1.缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。
全缺省
全部形参给缺省值。
半缺省
部分形参给缺省值。
注意:c++规定半缺省参数必须从右往左依次连续缺省,不能跳跃的给。
调用带缺省参数的函数时,必须从右往左依次给实参,不能跳跃的给。
关键
函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须在声明中给缺省值

int add(int a, int b=1)//半缺省
{return a + b;
}
int main()
{add(1);//b使用缺省值return 0;
}
int add(int a=1, int b=1)//全缺省
{return a + b;
}
int main()
{add();//没有传参的话,使用缺省值return 0;
}

2.函数重载

在上一次学习中我们知道c++支持在不同域使用同名变量,函数等。
除此之外,c++还可以在同一作用域出现同名函数。
但是有些人就要问了,为什么非得创建同名函数呢?名字不一样不照样可以使用吗?
让我们看这个例子:


int Add1(int l,int r)
{return l+r;
}
double Add1(double l,double r)
{return l+r;
}

我们想实现两个数相加函数,但针对不同类型时却可能要将函数名变成Add1,Add2…
这无疑会在将来调用时产生隐患。所以c++支持出现同名函数,要求同名函数的形参不同,可以参数个数不同或者类型不同。

int Add(int l,int r)
{return l+r;
}
double Add(double l,double r)
{return l+r;
}

这样在将来调用相加函数时,一律写成Add即可。
这段代码有问题吗?

void func()
{std::cout << "fun()" << std::endl;
}
void func(int a = 10)
{std::cout << "func(int a)" << std::endl;
}

毋庸置疑,两个函数构成重载。如果程序中没有func();就不会报错,但是如果有这一条语句,编译器就不认得到底要调用哪一个函数。
在这里插入图片描述

3.引用

概念:引用就是给已存在变量取了一个别名。
编译器不会为引用变量开辟内存空间。它和它引用的变量共用同一块内存空间。
例如:这里有一只猫,你可以叫它猫,也可以叫它哈基米,也可以叫它专属的名字。
定义方式
类型& 引用别名 = 引用对象

int main()
{int a = 0;int& b = a;a++;std::cout << b << std::endl;//输出结果为1return 0;
}

关于引用需要注意的点:

1.引用在定义时必须初始化,例如int a = 0; int& b = a;不允许等号右边没有变量。
**2.**一个变量可以有多个引用。
**3.**引用只能引用一个实体,不能改变
引用的用处:
在c语言阶段,我们经常使用指针来操作并解决问题。有了引用后,指针涉及到的一些场景就可以被替代了。而且引用理解起来要比指针容易,能减轻代码错误。
例如,在交换两个变量的值时:

void Swap(int& a,int& b)
{int tmp=a;a=b;b=tmp;
}

这样写非常容易理解。
再比如,在学习数据结构栈时,我们在操作改动栈时,必须要用一级指针来传参。但有了引用以后,我们可以直接传引用。比方说在入栈时:我们直接进行操作即可,不用使用->操作符了

void STPush(ST& rs, STDataType x)
{assert(ps);// 满了, 扩容 if (rs.top == rs.capacity){printf("扩容\n");int newcapacity = rs.capacity == 0 ? 4 : rs.capacity * 2;STDataType* tmp = (STDataType*)realloc(rs.a, newcapacity *sizeof(STDataType));if (tmp == NULL){perror("realloc fail");return;}rs.a = tmp;rs.capacity = newcapacity;}rs.a[rs.top] = x;rs.top++;
}

4.inline

用inline修饰的函数叫做内联函数,编译时编译器会再调用的地方展开内联函数,这样就不需要建立栈帧,提高效率了。

inline int add(int a, int b)
{return a + b;
}
int main()
{//如果汇编中有call add语句就是没有展开,否则就是展开了add(1, 2);return 0;
}

注意

  • 在vs编译器debug版本下默认是不展开inline,这样方便调试。
    在这里插入图片描述
    (出现了call add说明没有展开)

  • inline不建议声明和定义分离到两个文件。因为如果inline被展开,就没有函数地址。在链接阶段,链接器需要根据函数调用找到对应的函数定义,但此时可能找不到该函数的地址,从而导致链接错误。

    如果发现错误,欢迎打在评论区。
    主页还有更多优质内容OvO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/923713.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/923713.shtml
英文地址,请注明出处:http://en.pswp.cn/news/923713.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSH连接排故排查

文章目录SSH连接排故排查案例1&#xff1a;解决思路排故过程故障模拟SSH连接排故排查 案例1&#xff1a; 你是某在线教育公司的运维工程师&#xff0c;负责维护 3 台应用服务器。今日上午 9 点&#xff0c;开发团队反馈无法通过 SSH 连接 10.1.8.10 服务器部署代码。该服务器…

Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商数据的入门指南

摘要在当今数字化时代&#xff0c;电商数据蕴含着巨大的商业价值。亚马逊作为全球知名的电商平台&#xff0c;其上的商品信息、用户评价等数据对于市场分析、竞品研究等具有重要意义。然而&#xff0c;由于反爬虫机制的存在&#xff0c;直接获取亚马逊电商数据并非易事。本文将…

汽车多核架构中内存系统故障检测的改进算法

摘要随着半导体行业向纳米级方向发展&#xff0c;多核架构已成为主流趋势。然而&#xff0c;这一趋势也使得多核处理器面临诸多挑战&#xff0c;在一定程度上限制了其性能发挥。目前&#xff0c;汽车行业中的混合安全关键型系统普遍采用多核处理器。为满足新兴自动驾驶等级的需…

VastBase数据库Crash后使用gdb收集coredump信息

VastBase数据库Crash后使用gdb收集coredump信息&#x1f418; 数据库版本&#xff1a;VastBase G100 V3.0.8检查数据库崩溃后生成的core文件&#xff1a; [vbdbadbhost vastbase]$ ll -h core* -rw------- 1 vbdba vbdba 62G Aug 20 20:02 core-vastbase-162199-2025_08_20_19_…

【LeetCode 每日一题】2749. 得到整数零需要执行的最少操作数

Problem: 2749. 得到整数零需要执行的最少操作数 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(1)空间复杂度&#xff1a;O(1)整体思路 这段代码旨在解决一个具有数学和位运算性质的问题&#xff1a;给定两个整数 num1 和 num2&#xff0c;找到最小的正整数 k&…

安卓开发工程师中高级知识点 —— 系统底层安全方向

一、AIDL 通信 Android Interface Definition Language 基于 Binder 实现跨进程通信&#xff08;IPC&#xff09;&#xff0c;核心是通过定义接口生成代理类&#xff0c;屏蔽底层 Binder 通信细节 适用于跨进程服务调用&#xff08;如系统服务、多App协作&#xff09;。常见于后…

动环监控系统-机房高效运维

动环监控系统&#xff08;全称为动力环境监控系统&#xff09;是机房高效运维的核心工具&#xff0c;通过集成动力、环境、安防、IT设备等模块&#xff0c;结合智能告警、AI分析、3D可视化等技术&#xff0c;实现机房的全方位监控与管理。动力系统监控供电设备&#xff1a;实时…

知微传感Dkam系列3D相机SDK例程篇:CSharp设置相机工作模式

设置3D相机触发模式 写在前面 本人从事机器视觉细分的3D相机行业。编写此系列文章主要目的有&#xff1a; 1、便利他人应用3D相机&#xff0c;本系列文章包含公司所出售相机的SDK的使用例程及详细注释&#xff1b;2、促进行业发展及交流。设置触发模式及API说明 触发模式说明 知…

PHP 常用函数及用法

文章目录PHP 常用函数及用法一、字符串处理函数1. 字符串基础操作2. 字符串查找与替换3. 字符串分割与连接4. 字符串大小写转换5. 字符串格式化二、数组操作函数1. 数组基础操作2. 数组遍历与查找3. 数组修改与排序4. 数组过滤与合并三、文件操作函数1. 文件读写2. 文件和目录信…

yum命令--obsoletes与--allowerasing两者的区别

在 YUM&#xff08;Yellowdog Updater Modified&#xff09;包管理工具中&#xff0c;–obsoletes 和 --allowerasing 是两个与包升级 / 安装相关的选项&#xff0c;它们的功能和使用场景有明显区别&#xff1a; 1. --obsoletes&#xff08;默认启用&#xff09;作用&#xff1…

Day24_【深度学习(3)—PyTorch使用(1)—张量的创建和类型转换】

一、创建张量1.张量基本创建方式torch.tensor 根据指定数据创建张量 &#xff08;最重要&#xff09;torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量1.1 torch.tensor# 方式一&…

阿里云图像编辑大模型开发部署

与阿里云一起轻松实现数智化让算力成为公共服务&#xff1a;用大规模的通用计算&#xff0c;帮助客户做从前不能做的事情&#xff0c;做从前做不到的规模。让数据成为生产资料&#xff1a;用数据的实时在线&#xff0c;帮助客户以数据为中心改变生产生活方式创造新的价值。图像…

查看磁盘分区并新建一个分区,挂载分区

linux系统磁盘df -h查看文件系统的磁盘的空间占用情况&#xff0c;常用于快速检查磁盘使用率&#xff1a;df -h-h是说把磁盘空间以G位单位&#xff0c;如果直接用df也是可以的&#xff0c;只不过单位是块&#xff0c;看的不明显du -sh /home/查看/home目录下总共占用了多大的空…

vscode单击暂时预览文件 双击持续打开文件

直接单击文件列表中的文件&#xff0c;会在编辑器中以预览模式打开 文件标签会显示为斜体&#xff0c;表示是预览状态 当您单击另一个文件或开始编辑时&#xff0c;预览文件会自动关闭 在 settings.json 中添加&#xff0c;mac通过cmd,实现。 json {"workbench.editor.ena…

设计模式-桥接模式04

什么是桥接模式&#xff1f; 桥接模式就是把事物的两个方面&#xff08;两个变化的维度&#xff09;分开管理&#xff0c;让它们可以分别自由变化&#xff0c;然后通过一个“桥”把它们连接起来。举个生活中的例子 想象一下你在买鞋子&#xff1a; 鞋子有不同的款式&#xff08…

群晖企业级NAS :从中小企业效率工具到核心业务数据基石

在数字化转型加速的今天&#xff0c;数据已成为企业最核心的资产。全球超半数财富 500 强企业选择群晖&#xff08;Synology&#xff09;作为数据管理伙伴&#xff0c;其企业级 NAS 解决方案凭借 DSM 操作系统的生态优势、硬件与软件的深度协同&#xff0c;以及覆盖全场景的产品…

C++访问限定符private、public、protected的使用场景

C 访问控制关键字&#xff1a;public、private、protected 在C中&#xff0c;public、private和protected是访问控制关键字&#xff0c;用于实现面向对象编程的封装特性&#xff0c;控制类成员的访问权限。 访问控制关键字的使用场景 1. public&#xff08;公有成员&#xff09…

CKA08--PVC

Task mariadb namespace 中的 MariaDB Deployment 被误删除。请恢复该 Deployment 并确保数据持久性。 请按照以下步骤&#xff1a; 如下规格在 mariadb namespace 中创建名为 mariadb 的 PersistentVolumeClaim (PVC)&#xff1a; 访问模式为 ReadWriteOnce 存储为 250Mi 集群…

Freertos系列(调度机制与创建任务)

如果不想看的可以直接使用git把我的代码下载出来&#xff0c;里面工程挺全的&#xff0c;后期会慢慢的补注释之类的 码云地址&#xff1a;stm32学习笔记: stm32学习笔记源码 如果不会使用git快速下载可以选择直接下载压缩包或者去看看git的使用 Git入门教程-CSDN博客 一 调…

C++中std::vector Vs std::deque VS std::list对比详解

1) 核心差异速览 std::vector&#xff1a;连续内存、随机访问 O(1)、尾部 push_back 摊还 O(1)、中间插入/删除 O(n)&#xff0c;非常缓存友好。std::deque&#xff1a;分段&#xff08;block&#xff09;存储&#xff0c;不是整体连续&#xff1b;随机访问 O(1)&#xff08;但…