【C++系列Pn】引用——背刺指针的神秘刺客“吃我一棍”

news2024/10/7 18:32:07

前言

  • 大家好吖,欢迎来到 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原则上不能修改,但是可以通过找到其空间直接修改。(指针/别名)

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

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

相关文章

202313读书笔记|《山居七年》————我只想在广袤璀璨的星河里享受生的鲜活,独自飞,游走

202313读书笔记|《山居七年》————我只想在广袤璀璨的星河里享受生的鲜活,独自飞,游走 《山居七年》 作者张二冬,选择隐士山居是一种很自由随性的生活态度,我觉得这不是普通人可以拥有的,比如我,并未入…

Office project 2007安装

哈喽,大家好。今天一起学习的是project 2007的安装,Microsoft Office project项目管理工具软件,凝集了许多成熟的项目管理现代理论和方法,可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…

xmind思维导图转成禅道测试用例

xmind思维导图用来编写用例胜在效率高,可以快速的理清楚需求。缺点在于没法上传禅道,但是公司有要求每次迭代要有禅道的测试用例。直接写禅道的测试用例的话,又很耗时,效率低下,与提高人效的公司年度战略不符&#xff…

apache虚拟主机头的实现方式

目录 一:基于不同的IP地址 二:基于不同的端口 三:基于不同的域名 一:基于不同的IP地址 步骤一:修改主配置文件 vim /usr/local/apache/conf/httpd.conf 声明监听不同的IP地址的80端口 Listen 192.168.2.20:80 Listen…

ChatGPT工作提效之使用python开发对接百度地图开放平台API的实战方案(批量路线规划、批量获取POI、突破数量有限制、批量地理编码)

ChatGPT工作提效系列文章目录 ChatGPT工作提效系列 ChatGPT工作提效之初探路径独孤九剑遇强则强ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互)ChatGPT工作提效之生成开发需求和报价单并转为Excel格式ChatGPT工作提效之小…

URLConnection(四)

文章目录 1. 配置客户端请求HTTP首部2. 向服务器写入数据3. URLConnection的安全考虑4. HttpURLConnection 1. 配置客户端请求HTTP首部 HTTP客户端(如浏览器)向服务器发送一个请求行和一个首部,如下: web服务器可以根据这个信息…

Visual Studio 远程调试工具(Remote Debugger)使用方法

一、关于Remote Debugger 当项目在测试环境上有bug,需要运行代码调试一下,这时就需要在测试环境上安装一个调试工具(Remote Debugger),然后在本地运行代码,远程链接到测试环境服务器来调试代码&#xff1b…

算法基础学习笔记——⑦位运算

✨博主:命运之光 ✨专栏:算法基础学习 目录 ✨位运算 ✨操作一 🍓十进制转化成二进制、八进制、十六进制(连除法) 🍓二进制、八进制、十六进制转化成十进制 🍓关于原码,反码&am…

Unity四叉树地图

当使用Unity构建大规模的游戏地图或场景时,使用四叉树数据结构可以提高性能和效率。四叉树是一种基于分割的数据结构,将空间划分为四个相等的子区域,并以递归方式构建树结构。在游戏开发中,四叉树常用于空间分区、碰撞检测和可视化…

Eclipse 教程Ⅱ

Eclipse 修改字符集 默认情况下 Eclipse 字符集为 GBK,但现在很多项目采用的是 UTF-8,这是我们就需要设置我们的 Eclipse 开发环境字符集为 UTF-8, 设置步骤如下: 在菜单栏选择 Window -> Preferences -> General -> W…

python的统计函数库scipy.stats是一个很棒的统计包

描述:在Scipy的模块中,有一个统计的木块——States,其中函数有描述统计(describe)、峰度(kurtosis)、偏度(skew)、众数(mode)、n阶矩。 分布:还有一些分布函数,正泰分布(norm)、对数正态分布(lognorm)、…… 计算:针…

Go语言介绍以及Go语言环境安装

初步介绍: Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源&am…

Manjaro linux 安装svn 并在文件管理器里显示相关图标

需要先安装svn linux版打开终端执行 1 sudo pacman -S svn 安装完成后执行一下 1 svn --version 出现这个就说明svn已经安装完成了,这个时候我们可以执行 1 svn checkout [路径] 就可以检出svn服务器上相关内容了 但是这个有的时候我们打开文件管理器想要看到被…

并发编程的三大特性之原子性

原子性 这个定义是一种规定,描述了Java中的理想就是为了能实现一个操作不能分割,不可中断,一个线程在执行的时候,另一个线程不会去影响他。 Java中的原子性可以理解为多线程操作临界资源,预期的结果和最终的结果一致。…

STM32基本外设超详细44000字教程

GPIO GPIO(General Purpose Input Output)通用输入输出口可配置为8种输入输出模式引脚电平:0V~3.3V,部分引脚可容忍5V输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等输入模式下可…

ML | 5 Logistic回归

ML | 5 Logistic回归 文章目录 ML | 5 Logistic回归Logistic回归思想基于Logistic回归和Sigmoid函数分类基于最优化方法的最佳回归系数确定梯度上升法**梯度上升法例子:**梯度下降法 训练算法:使用梯度上升找到最佳参数画出决策边界 训练算法&#xff1a…

本地是如何开启Nginx服务的?

一、window 配置Nginx服务器 1、Nginx下载地址 http://nginx.org/en/download.html 选择一个适合自己的版本 2、下载后直接解压 3、修改Nginx启动端口 配置文件位置:nginx-1.22.0/conf/nginx.conf 默认80,以防端口被重用,改为8056 4&…

PFEA112-20 3BSE050091R20 张力控制器

您的张力测量系统包括: 张力电子PFEA111或PFEA112–PFEA111是一款经济高效的紧凑型用户友好型张力电子产品,提供 来自两个称重传感器的精确可靠的快速模拟SUM信号,用于控制 和/或监测。显示器可以显示SUM、单个A&B和差异信号小尺寸和DIN导…

k8s 维护node与驱逐pod

1.维护node节点 设置节点状态为不可调度状态,执行以下命令后,节点状态会多出一个SchedulingDisabled的状态,即新建的pod不会往该节点上调度,本身存在node中的pod保持正常运行 kubectl cordon k8s-node01 kubectl get node 2.驱…

多线程并发环境生产者-消费者,kotlin

多线程并发环境生产者-消费者&#xff0c;kotlin 多个生产者-多个消费者&#xff0c;消费者竞争抢占生产者制造的资源。 //存放资源的仓储 val store arrayOfNulls<Int>(1)//资源 var RESOURCE: Int 0fun producer(tid: Long) {synchronized(store) {if (isFull()) {…