浅析C++引用

news2024/9/20 16:38:52

浅析C++引用"&"

​ C++中引入了一个新的语言特性——引用(&),它表示某一对象的别名,对象与该对象的引用都是指向统一地址。那么我们就来看看关于引用的一些知识点吧🧐

特性

  1. 引用在定义时必须初始化
  2. 一个变量可以有多个引用
  3. 引用仅能引用一个实体,不能再引用其他实体

用法

​ 可以看出,引用与被引用的对象使用同一块空间

Pasted image 20240702193838

​ 由此我们得出第一种用法,引用传参

​ 在C语言中,交换函数需要使用指针获得地址,通过解引用形参达到修改实参的目的,这无疑是很麻烦的,而在C++中,只需要在接收参数时进行引用,就可以实现数据修改。

​ 并且,由于引用指向的是同一地址,则在接收时不需要开辟栈区,所以当遇到大量数组传递时,引用可以提高运行效率

Pasted image 20240702194438

第二种,传引用返回

​ 在C语言中,我们的传值返回是返回的临时变量,临时变量会存在寄存器中,或者提前开辟一段空间存储返回值,等返回后再销毁。而传引用返回则不会去开辟新的空间,直接将返回值所在的空间传回,这样也能够提高运行效率。

​ 但是传引用返回是一种较为危险的行为,如下图:

​ 当我们使用这种写法时,编译器会警告使用了临时变量的地址,原因是我们将返回值n给引用了,但n是个临时变量,出了作用域会销毁,此时根据编译器的不同,得到的结果也不同(有的编译器会暂时保存临时变量,直到该地址被再次使用,有的编译器会直接销毁,编译结果为随机值)

image-20240707171532563

​ 再来看下面这种写法,函数不变,但是将a给引用了,此时第一次打印没问题,第二次就变成了随机值,原因是第一次打印跟上面情况一样,编译器暂时保存了临时变量,但是第二次调用cout函数时,cout将count函数的空间覆盖了,取不到n的值,则被引用的a也变成了随机值!

image-20240707172002612

​ 由此得出,引用返回确实能提高运行效率,但是不要在返回局部变量时使用!可以在如下情况合理使用:

​ 写一个简易的顺序表,用引用返回和引用传参可以实现读和修改并用的功能

image-20240707174028868

常引用

​ 来看下面的例子

image-20240707183847963

image-20240707184037431

​ 第一个例子出错原因是a被const修饰成为静态常量,而b没有const,此时权限被放大了,正常情况下权限只能平移或者缩小,所以const int& b = a才是正确写法

​ 第二个列子中,类型转换过程中会创建临时变量,临时变量具有常性,也属于权限放大,double前应加const修饰

​ 第三个例子与第二个相同,该返回值是临时变量,具有常性,需要加const修饰

底层

​ 引用的底层与指针一样,但是不能说引用就是指针

image-20240707184858580

引用与指针

  1. 引用概念上是变量的别名,指针是存储一个变量的地址
  2. 引用在定义时必须初始化,指针没有要求
  3. 引用无法改变对象,指针可以改变对象
  4. sizeof中,引用为引用类型大小,而指针始终是地址空间所占字节个数
  5. 引用自加是对象+1,指针则是向后偏移一个类型的大小
  6. 没有多级引用
  7. 指针需要解引用才能取值,引用不需要
  8. 引用相对于指针更安全

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

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

相关文章

C-10 凸包

凸包 数学定义 平面的一个子集S被称为是凸的,当且仅当对于任意两点A,B属于S,线段PS都完全属于S过于基础就不详细介绍了 凸包的计算 github上找到了别人的代码,用4种方式实现了凸包的计算,把他放在这里链接地址htt…

六、数据可视化—Wordcloud词云(爬虫及数据可视化)

六、数据可视化—Wordcloud词云(爬虫及数据可视化) 也是一个应用程序 http://amueller.github.io/word_cloud/ Wordcloud词云,在一些知乎,论坛等有这样一些东西,要么做封面,要么做讲解,进行分析…

Echarts 实现数据可视化

Echarts 简介 Echarts 是一个开源的、免费的、成熟的、商业级图表可视化框架,是 Apache 开源社区的顶级项目之一,也是国内使用最多和最为广泛的可视化图表框架之一。 数据可视化图表框架并没有一个统一的行业标准,比较常见的有 D3、Highchart…

电子设备常用的胶水有哪些?

目录 1、502胶水 2、703胶水 3、704胶水 4、AB胶 5、红胶 6、Underfill 7、导电胶 8、UV胶 9、热熔胶 10、环氧树脂胶 11、硅酮胶 12、聚氨酯胶 13、丙烯酸胶 14、丁基胶 1、502胶水 502胶水,也被称为瞬间胶或快干胶,是一种非常常见的粘合…

如何下载Github上项目中的一个目录或几个文件

目录 问题的由来 GitZip for Github插件 Edge中插件的安装 Chome中插件的安装 插件的使用 Github授权 文件下载 问题的由来 经常使用Github的可能都会有这样的需求,有的时候一个仓库好几个GB,但是感兴趣的只是某个目录下的文件。Git没有单独下载…

CTFShow的RE题(四)

真的是签到 给的是无后缀的 zip 文件,解压发现需要密码,也没有提示,猜测可能是 zip 伪加密 (走错厂了吧) zip是否加密 首先就是看开头的6 ,7byte,和中间 01 02 后的 5 ,6byte 成功解…

如何做一个透明度渐现且向上位移逐行出现的文字效果

前言 在这个夜黑风高的夜晚,你的眼睛已经开始有些疲惫。你的手指在键盘上轻轻地敲击着,仿佛在弹奏一首无声的夜曲。你的思绪在代码的海洋中飘荡,寻找着最后一行需要完成的代码。就在这时,你的老板走了过来,他的脸上带…

简过网:事业单位编制有哪几种类型,你都知道吗?

近几年来,随着考编、考公热,越来越多的朋友都有考编的想法,尤其是刚毕业的大学生,但是很多朋友对于事业单位编制有不清楚的地方,比如到底哪些属于事业单位的范围,事业单位编制分为哪些类型?今天…

解决:Android Studio 突然打不开!提示Failed to create JVM:error code -1

Android studio1.5 一直用得好好的,突然有一天打不开,并提示: 可是系统配置中,java的配置也是正常的。 解决方法: 修改安装目录下的studio64.exe.vmoptions 文件 直接将文件内容改成: -Xms128m -Xmx512m…

【活动行】参与上海两场线下活动,教育生态行业赛总决赛活动和WAIC人工智能大会活动 - 上海活动总结

目录 背景决赛最后一公里领域范围 决赛作品AI智教相机辅导老师Copilot辅导老师Copilot雅思写作竞技场 优秀作品总结 背景 决赛 百度发起的千帆杯教育生态行业赛于2024年7月4日进行线下决赛,博主虽然没能进入决赛,但也非常荣幸能够以嘉宾身份到现场给进…

213.贪心算法:跳跃游戏||(力扣)

class Solution { public:int jump(vector<int>& nums) {if (nums.size() 1) return 0; // 如果数组长度为1&#xff0c;已经在终点&#xff0c;不需要跳跃int cur 0; // 当前跳跃能到达的最远位置int flag 0; // 记录跳跃次数int next 0; // 下一次跳跃能到…

软件设计之Java入门视频(13)

软件设计之Java入门视频(13) 视频教程来自B站尚硅谷&#xff1a; 尚硅谷Java入门视频教程&#xff0c;宋红康java基础视频 相关文件资料&#xff08;百度网盘&#xff09; 提取密码&#xff1a;8op3 idea 下载可以关注 软件管家 公众号 学习内容&#xff1a; 该视频共分为1-7…

2024年【低压电工】考试题库及低压电工考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年低压电工考试题库为正在备考低压电工操作证的学员准备的理论考试专题&#xff0c;每个月更新的低压电工考试总结祝您顺利通过低压电工考试。 1、【单选题】PE线或PEN线上除工作接地外其他接地点的再次接地称为(…

通过Vxlan实现数据中心互联有感

随着企业的发展&#xff0c;为满足跨地域运营、用户接入、异地灾备等场景&#xff0c;越来越多的企业通常在多地域部署多个数据中心。 数据中心互联DCl(Data Center Interconnection)是不同数据中心VM之间互相通信的一种解决方案使用VXLAN、BGP EVPN等技术&#xff0c;使数据中…

RoPE 旋转位置编码,详细解释(下)NLP 面试的女生彻底说明白了

RoPE 旋转位置编码&#xff0c;详细解释&#xff08;下&#xff09;NLP 面试的女生彻底说明白了 原创 看图学 看图学 2024年07月01日 07:55 北京 书接上文&#xff0c;上文见&#xff1a;这么解释 RoPE 旋转位置编码&#xff0c;女朋友睁大了双眼&#xff08;上&#xff09; …

12种增强Python代码的函数式编程技术

前言 什么是函数式编程&#xff1f; 一句话总结&#xff1a;函数式编程(functional programming)是一种编程范式&#xff0c;之外还有面向对象&#xff08;OOP&#xff09;、面向过程、逻辑式编程等。 函数式编程是一种高度抽象的编程范式&#xff0c;它倡导使用纯函数&#x…

【计算机网络】物理层(作业)

1、若信道在无噪声情况下的极限数据传输速率不小于信噪比为30dB 条件下的极限数据传输速率&#xff0c;则信号状态数至少是&#xff08;D&#xff09;。 A. 4B. 16C. 8D. 32 解析&#xff1a;可用奈奎斯特采样定理计算无噪声情况下的极限数据传输速率&#xff0c;用香农第二定…

Aqara 发布多款智能照明新品,引领空间智能新时代

7月8日&#xff0c;全球 IoT 独角兽品牌 Aqara 以“光&#xff0c;重塑空间想象”为主题&#xff0c;举办了线上智能照明新品沟通会。 会上&#xff0c;Aqara 正式发布一系列引领行业的智能照明新品&#xff0c;包括银河系列轨道灯 V1 以及繁星系列妙控旋钮 V1 等&#xff0c;…

Leetcode—97. 交错字符串【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—97. 交错字符串 2d动规实现代码 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int m s1.length();int n s2.length();int len s3.length();if(m n ! len) {return false;}vector<…

metersphere链接腾讯邮箱步骤

1、打开腾讯邮箱生成授权码 路径&#xff1a;设置-账户-账户安全 生成的授权码只会展示1次&#xff0c;注意保存 2、在系统设置-系统参数设置-邮件设置填写授权码和SMTP信息 SMTP信息在邮箱的客户端设置中可以获取到对应的信息 3、信息填写完后&#xff0c;可以测试连接&…