【C++系列P2】引用——背刺指针的神秘刺客(精讲一篇过!)

举报
YY的代码生活 发表于 2023/07/03 09:40:27 2023/07/03
【摘要】 ​ 前言大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎!如标题所示,本章主要内容主要来侃侃“引用”这个刺客!如下就是大纲啦~​编辑一.引用1.含义与特点引用,即取别名。它的最大特点是编译器不会为引用变量而开辟空间,他们共用同一块空间。 2.引用和指针的区别(主要) 1.引用使用时必须要初始化。2.引用在初始化时引用一个实体后,不能再次引用其他实体,只能赋值。3.引用使用起来更安全。图示...

 前言

  • 大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎!
  • 如标题所示,本章主要内容主要来侃侃“引用”这个刺客!如下就是大纲啦~

编辑


一.引用


1.含义与特点

引用,即取别名。它的最大特点是编译器不会为引用变量而开辟空间,他们共用同一块空间。 


2.引用和指针的区别(主要) 

1.引用使用时必须要初始化

2.引用在初始化时引用一个实体后,不能再次引用其他实体,只能赋值。

3.引用使用起来更安全

图示:

编辑


3.引用的实际使用


一.引用作为参数

作为输出型参数时,面对大对象/深拷贝对象时,由于不用另外开辟空间拷贝,可以提高效率


二.引用作为返回值  

小目录:

  1. 适用场景
  2. 修改返回值+获取返回值 (使通讯录代码更简洁)

1.不适用场景: 

编辑

适用场景:(静态区栈帧不销毁)

编辑


2.实际应用 

  • 在通讯录中,用传统的方法,需要“查找"到对应pos位置后再“修改”
  • 而运用“引用作为返回值”,可直接对查找到的值进行修改。 

编辑

原本操作:

编辑

改进后操作: 

 编辑


3.引用过程中的权限问题(平移,缩小,放大) 

  1. 首先我们要知道,临时变量是具有常性const 修饰的类型也具有常性static的数据存储在静态区同样具备常性
  2. const和static的权限理论上平级,而临时变量的权限低于二者。
  3. 只能存在权限平级和权限缩小的情况,不能存在权限放大的情况。通俗而言:权限低的不能给权限(常性)强的取别名。

权限相关知识点:权限等级较高的是const和具有常属性的量,权限较低的是普通数据

  • 权限高的或平级的可以给另一量取别名/取地址(权限的缩小平移
  • 权限低的不能给另一量取别名/取地址(权限的放大

图示:

编辑

1.平级和权限缩小的情况

编辑 编辑

 2.权限平移情况

编辑

 3.权限放大情况

编辑编辑

 PS:const原则上不能修改,但是可以通过找到其空间直接修改。(指针/别名)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。