从零开始的C++(二)

news2024/11/25 1:08:13

1.为什么C++有函数重载但是C没有函数重载?

这涉及了C、C++的函数命名习惯,在C语言编译阶段,函数的命名不会受其参数列表的影响,即只要函数名相同编译出的函数名就相同。但在C++中,函数命名受影响,如下图所示,函数addss

在编译阶段的函数名是 ?addss@@YAHHH@Z,此处最后两个H可以相当于形参类型是int,正是因为函数名的不同,所以C++才能实现函数重载。同时这也说明了为什么返回类型不同不能视为函数重载的条件,因为你在调用函数的时候并没有说明你希望的函数返回类型,所以无法以返回类型作为判断你用的哪个函数的依据。另外,函数名称的作用是表示对应函数的第一条指令的地址,因此只有函数名不同,才能跳转到不同的函数。

2.引用

int main()
{
    int b = 0;
    int& a = b;
}

引用的一大显著特征就是类型名后面跟“&”,如上图a就是对b的引用。引用的作用类似与起了一个别的名称,这时候你调用别名和调用本名的作用是一致的( 如上图调用a和调用b效果相同),在分析一段代码的时候,可以直接将所有的引用用原本的引用对象替换即可,逻辑上不会有一点改变。

引用常用于函数,当引用做函数形参的时候,可以起到提高效率、做输出型参数的作用,注意引用可以做输出型参数的原因是引用的修改会影响到对于的实参。当引用做函数的返回值时,可以起到提高效率,修改返回对象的作用,但引用做函数的返回值有着一定的要求,如引用的对象在函数结束以后不能销毁,换言之引用的对象不能是函数中的临时变量,只能是如全局变量、静态变量、堆上开辟的等。

在上文中我提到过引用类似于起了一个别名,而现实中同一个事物可以有多个别名,因此同一个事物也可以有多个引用,如下图所示,a、c、d是对b的引用,所以他们的地址均是一样的,修改其中任意一个其余几个的内容均会改变。

引用本身存在一定限制,比如引用的必须是权限平移或者权限缩小,不能权限放大,此处的权限暂时可以粗略理解成变量本身的限制,比如const修饰的变量的权限最小,因此下图中的引用会报错,因为权限扩大了。(b是const修饰的,权限小于a,是权限扩大)。

那么下述代码为什么会报错呢,是因为类型不匹配吗?

答案是错误的,上述代码错误的原因是用double类型的b引用int类型的a,实际上引用的是一份临时变量,该临时变量类型是double,被a赋值,而该临时变量具有常量的特性,因此此处失败的原因还是权限扩大,那么该怎么修改才能对?在double前面加一个const,这样就是权限平移了。

像这种具有常量特性的临时变量,也包括函数返回一个临时变量,如下图的a被返回,ret引用的就是a的一份临时变量,同时,因为被引用了,所以这份临时变量的生存期也发生了改变,不会随着函数的结束而销毁。(此处切记不要与上述引用做函数返回类型搞混了,这里是引用了一个函数返返回值,函数返回的是int类型不是引用!)

另外还应当注意的一点是引用相当专一,当引用了一个对象以后就不能再引用别的对象,如下图

b是a的引用,就不能是c的引用了。

综上,本篇学习了函数重载的一些条件,初步认识了引用。

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

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

相关文章

uboot启动流程-uboot链接接脚本

一. uboot 启动流程 本文我们来详细的分析一下 uboot 的启动流程,理清 uboot 是如何启动的。通过对 uboot 启动流程的梳理。 我们就可以掌握一些外设是在哪里被初始化的,这样当我们需要修改这些外设驱动的时候就会心里有数。另外,通过分析 …

华为云云耀云服务器L实例评测 | 实例场景体验之搭建个人博客:通过华为云云耀云服务器构建个人博客

华为云云耀云服务器L实例评测 | 实例场景体验之搭建个人博客:通过华为云云耀云服务器构建个人博客 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云云耀…

COCO 数据集 人体关键点格式

图片与标注数据在 COCO官网 均提供下载 标注格式 COCO 的标注中包含 4 个部分/字段,"info" 描述数据集,"licenses" 描述图片来源,"images" 和 "annotations" 是主体部分 "images" 部分…

数学术语之源——纤维(fiber)

1. 数学术语“纤维”(英英“fibre”,美英“fiber”)在数学中的起源 fiber[ˈfaɪbə(r)]这个词始于14世纪晚期,词义为“肝叶的一瓣(a lobe of the liver)”,也指“内脏(entrails)”。来自中世纪拉丁语“fibre”,其又源自拉丁语“fibra”,词义为“纤维(a fiber)、细…

Logistic map混沌掩盖信号

开学接触了一些有关混沌知识的学习,阅读量一些混沌通信的论文,对于混沌掩盖信号以确保加密通信有一定的兴趣。混沌的产生我选用的是logistic map映射产生混沌,主要就是一个递推公式: 对于这样一个式子,可以看出&#x…

300元开放式耳机哪款好、百元开放式耳机推荐

我是一个非常喜欢戴着耳机出门的社恐宅男,但看了一些文章后发现长期戴耳机对耳朵也是有危害的,比如长时间佩戴耳机容易导致耳朵潮湿,从而增加细菌滋生的风险,其次,长时间高音量使用耳机可能会造成听力损伤以及长期佩戴…

功率放大器有哪些要求和标准参数

功率放大器是一种常见的电子设备,用于将输入信号增强到更高的功率级别。为了满足不同应用需求,功率放大器需要符合一些特定的要求和标准参数。 在现代电子设备中,功率放大器广泛应用于各种领域,如通信、音频放大、射频放大等。它们…

Vue之transition组件

Vue提供了transition组件,使用户可以更便捷地添加过渡动画效果。 transition组件 transition组件也是一个抽象组件,并不会渲染出真实dom。Vue会在其第一个真实子元素上添加过渡效果。 props render 这里将render分为两部分,第一部分界定真…

Golang的性能优化

欢迎,学习者们,来到Golang性能优化的令人兴奋的世界!作为开发者,我们都努力创建高效、闪电般快速的应用程序,以提供出色的用户体验。在本文中,我们将探讨优化Golang应用程序性能的基本技巧。所以&#xff0…

XPD738协议系列-USB Type-C PD 和 Type-A 双口控制器

产品描述: XPD738 是一款集成 USB Type-C、USB Power Delivery(PD)2.0/3.0 以及 PPS、QC3.0/QC3.0/QC2.0 快充协议、华为 FCP/SCP/HVSCP 快充协议、三星 AFC 快充协议、BC1.2 DCP 以及苹果设备 2.4A 充电规范的多功能 USB Type-C 和 Type-A …

通达信筹码获利比例选股指标公式,寻找二次探底

获利比例的意思是当前价格的获利盘比例,从筹码分布理论的角度来说,获利比例越低,说明越少的人处于获利状态;获利比例越高,说明越多的人处于获利状态。当然这只是理论分析,获利比例是通过历史数据按照一定的…

蛋糕烘焙外卖配送小程序商城的效果是什么

随着人们消费水平提升,蛋糕烘焙成为餐饮行业重要的细分赛道之一,市场中大小品牌众多,同时又相对聚集,由于城市中消费者众多,每个商家都有一定生意,但想要破圈进一步增长却很困难,加之线上电商冲…

华为云云耀云服务器L实例评测 | 实例评测使用之软件性能评测:华为云云耀云服务器下的 Redis 性能评测

华为云云耀云服务器L实例评测 | 实例评测使用之软件性能评测:华为云云耀云服务器下的 Redis 性能评测 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云…

SW免安装的toolbox只读问题

把SOLIDWORKSDATA 整体复制到另外的目录,然后这里设置目录位置。不然原始位置有只读属性

ngrok内网穿透以及原理

〇、前言 如果要想在本地部署一个服务,且要向不在本局域网的用户展示我们的服务,此时就要用内网穿透工具,把我们的服务变成公网服务。ngrok就是一个很好的工具,操作简单,服务稳定。 一、使用 ngrok 1. 下载ngrok 下…

nextTick源码解读

📝个人主页:爱吃炫迈 💌系列专栏:Vue 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 nextTick原理nextTicktimerFuncflushCallbacks 异步更新流程updatequeueWatcherflushS…

uniapp小程序 - 隐私协议保护指引接入教程

文章目录 前提:__usePrivacyCheck__: true步骤一、封装弹窗组件步骤二、单个页面引用一、被动监听二、主动查询 前言:官方发布公告,自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,仅当开发者主动向平台同…

什么是GraphQL?它与传统的REST API有什么不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是GraphQL?⭐ 与传统的REST API 的不同⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣…

基于51单片机数字电压表仿真设计_数码管显示(程序+仿真+原理图+PCB+报告+讲解视频)

基于51单片机数字电压表仿真设计_数码管显示(程序仿真原理图PCB报告讲解视频) 原理图:Altium Designer 仿真版本:proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0…

机器学习之神经网络的层次

文章目录 神经网络组成神经网络根据结构分类神经网络的信号传递 神经网络组成 大脑是一个巨大的神经元网络,所以神经网络是一个节点网络。根据节点的连接方式,可以创建多种神经网络。最常用的神经网络类型之一采用了如图所示的节点分层结构 正方形节点组…