当前位置: 首页 > news >正文

C++中的引用

        在C++中,我们要学习一个新的概念,叫做引用。引用不是对象,它只是给变量取一个别名。就好比,我们每个人总会右一下外号,或者是小名。当朋友或者家长不管是直接叫你的名字,还是叫你的小名,你都会答应。

引用的概念和定义

        引用不是定义一个新变量,而是给已存在的变量取一个别名,编译器不会为引用开辟空间,它和被引用变量使用的是同一块空间。

        类型&引⽤别名=引⽤对象;

        C++中为了避免引入太多复杂的符号,所以这里的引用符号和取地址符号&是同一个符号,只不过它们的用法不同,含义也不同。我们还是敲代码来看一看吧。

        可以看到我们定义了一个变量a,我们使用b取引用它,现在b就是a的一个别名,然后们分别打印a,b 我们发现它们的值是相同的。下面我们再来看一看它们的地址是不是相同的呢?

        可以看到它们两个都指向的同一块空间,自然都是同一个值。

         一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用和它的初始值对象就一直绑定在一起。因为无法令引用绑定到另外一个对象,因此引用必须要初始化。

        简单来说,引用在定义时就必须要初始化,然后它就无法改变引用对象了。

        需要注意的是,引用本身不是一个对象,所以不能定义引用的引用。但是我们可以给别名取别名。

        我们之后对引用进行操作也就是对它引用的对象进行操作。

        通过代码可以看到,我们通过修改b的值,也修改了a的值。

引用的使用

        引用在实践中主要用做引用传参和引用做返回值中减少拷贝提高效率和改变引用对象同时改变被引用对象。

        比如我们使用函数交换两个数的值时,我们学习了C语言,首先想到的就是使用指针去交换两个值的大小。而当我们学习了C++中的引用后,我们就可以使用引用去交换两个变量的值了。

        可以看到原来a=10,b=20,最后打印出的时候,a=20,b=10。说明两个变量的值已经得到了交换。 相比于以前使用指针去交换两个变量的值,我们使用引用就方便了许多。

        后面我们还会学习到引用作为返回值的使用,我们后面再学习。

Const限定符

        有时候我们希望定义这样一种变量,它的值不能被改变。所以我们用到了Const 限定符。根据它的中文翻译,它的意思是恒定的,不变的,无法修改的(const)。从而我们可以知道,当我们定义一个变量的时候,在它前面加上const可以防止它被修改。

初始化与const

        对象的类型决定了其上的操作。与非const类型所能参与的操作相比,const类型的对象能完成很大一部分,但也不是所有的操作都适合。主要的限制就是只能在const类型的对象上执行不能改变其内容的操作。但是其它操作,比如:赋值,参与计算,转化成bool值等。

        看 ,num已经被const修饰,我们尝试着去修改它,编译器给我们报错了,说表达式必须是可修改的左值。num本身是一个变量,但当我们使用const去修饰的时候,它就成为了一个常量,我们知道常量就是不能够修改的。 

const的引用

        可以把引用绑定到const对象上,就像绑定到其他的对象上一样,我们称之为常量引用。我们前面说过const可以让对象无法修改,可以理解为变成了常量。我们下面都用常量引用来说。

        对于常量引用来说,需要记住的就是,只能小范围去引用大范围。      

        可以看到 num是一个常量,只能读取它。而我们想让一个可读可写的别名去引用它,这样就可能导致从rnum去修改到num,这是绝对不允许发生的。

        我们再来看一看,当我们使用一个常量别名(只能读,不能修改)去引用num(能读,能写)着就是合法的。因为num是一个大范围,rnum是一个小范围。而上面那种情况就是大范围去引用小范围了就错了,就有点本末倒置的意思。人家本体都不能修改,你一个别名却想要修改它,这肯定是不被允许的。

常量指针和指针常量

        与引用一样,也可以令指针指向常量或非常量。类似于常量引用,指向常量的指针不能用于改变所指对象的值。

         我们还是通过代码来分析。

        我们只需要记住,指针必须要和指向的对象类型相同。如上图,因为num的类型是const int 型,我们学习过指针,所以pnum2的类型就应该是const int * 型 。所以说我们称这样指向常量的指针为" 常量指针"。

        下面我们来学习一下指针常量。顾名思义,指针就是一个常量,指针的值无法修改,那么它永远就只能指向一个对象了。     

        可以看到我们定义了两个变量,然后初始化的时候我们让pnum指向了num1,然后我们试图去修改pnum指向的空间,结果遭到了编译器的反对,报错,说指针是一个常量,无法修改。这就和前面的const修饰常量一样,类比一下,应该就很好理解。

        最后还有一种指向常量的常量指针。也就是说该指针既不能修改指向的值,也不能修改它自己所指向的对象。 这句话听起来有点复杂,多理解一下就行了。

指针和引用的主要区别

在C++中,指针和引用都是用于处理内存地址的概念,但它们之间有一些重要的区别:

  1. 指针可以被重新赋值或者指向不同的内存地址,而引用在被初始化后就不能再引用其他对象,因此引用一般被认为是别名。

  2. 指针可以为空(nullptr),即不指向任何内存地址,而引用必须引用一个有效的对象。

  3. 指针使用“*”来访问保存在其指向地址中的值,而引用直接使用变量名来操作对象的值,因此引用操作起来更加方便。

  4. 指针可以指向空间被释放的内存地址(悬空指针),而引用则总是指向有效的对象,避免了悬空引用的情况。

        总的来说,指针更加灵活,但使用引用可以在代码中更加清晰和直观地表达意图。在选择使用指针还是引用时,需要考虑代码的需求和设计,以及安全性和效率等因素。

        欢迎大家点赞+评论。

 

相关文章:

C++中的引用

在C中,我们要学习一个新的概念,叫做引用。引用不是对象,它只是给变量取一个别名。就好比,我们每个人总会右一下外号,或者是小名。当朋友或者家长不管是直接叫你的名字,还是叫你的小名,你都会答应…...

【自学安全防御】三、企业双机热备和带宽管理的综合实验

实验拓扑: 实验任务: 12,对现有网络进行改造升级,将当个防火墙组网改成双机热备的组网形式,做负载分担模式,游客区和DMZ区走FW3,生产区和办公区的流量走FW1 13,办公区上网用户限制流…...

无极与有极电容的区别

无极性电容与有极性电容:差异与应用探索 在电子元件的广阔世界里,电容器无疑是不可或缺的一部分。它们以储存电荷和调节电路中的电压与电流而闻名。然而,电容器并非一概而论,其中最为显著的区别之一就是无极性电容与有极性电容。…...

入坑树莓派(2)——树莓派4B与手机蓝牙通信

入坑树莓派(2)——树莓派4B与手机蓝牙通信 1、引言 在入坑树莓派(1)中已经搞掂了可视化问题。现在继续开展下一步,尝试与手机通信,一开始是想弄wifi连接的,但发现基于wifi的APP比较难弄,为了降低开发的难度,又因为树莓派板子自带蓝牙模块,所以直接选用蓝牙连接手机…...

RocketMQ单结点安装/Dashboard安装

目录 1.安装NameServer 2.安装Broker 3.使用自带工具测试数据发送 4.使用DashBoard进行查看 5.关闭相关设备 前置条件:两台虚拟机CentOS Linux release 7.5.1804(ps:当然也可以都部署在一台机器上) RocketMq属于天生集群。需要同时启动nameServer和Broker进行…...

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十四章 进程基础

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…...

使用LVS+NGinx+Netty实现数据接入

数据接入 链接参考文档 LVSKeepalived项目 车辆数据上收,TBox通过TCP协议连接到TSP平台 建立连接后进行数据上传。也可借由该连接实现远程控制等操作。 通过搭建 LV—NGinx—Netty实现高并发数据接入 LVS:四层负载均衡(位于内核层&#x…...

云手机结合自主ADB命令接口 提升海外营销效率

现在,跨境电商直播已经成为在线零售的重要渠道,在大环境下,确保直播应用的稳定性和用户体验至关重要。 云手机支持自主ADB命令接口,为电商直播营销提供了技术支持,使得应用开发、测试、优化和运维更加高效。 什么是A…...

【计算机视觉前沿研究 热点 顶会】CVPR 2024中与域适应、分布外目标检测相关的论文

测试时间线性分布外检测 分布外( OOD)检测旨在通过在输入样本显著偏离训练分布(分布中)时触发警报来解决神经网络的过度置信度预测,这表明输出可能不可靠。当前的 OOD 检测方法探索各种线索来识别 OOD 数据&#xff0…...

首次由国产8K摄像机服务巴黎奥运会8K公用信号

法国巴黎时间16日上午,中央广播电视总台“中国红”8K转播车穿越大半个地球,抵达法兰西体育场,顺利完成与奥林匹克转播公司(OBS)的交接。 (1)“中国红”8K转播车 作为适合户外露天项目的“移动制作域”,“…...

idea怎么配置gradle多个版本

1.背景 gradle版本很多,而且很多时候版本是不兼容的,我们希望拉取下来的代码就包含已经配置好的版本,而不是去配置本机的gradle版本..... 意思就是要实现项目A可以用6.X版本 项目B可以使用7.X版本 项目C可以用9.X版本..... 2.配置方式 步骤一:项目根路径下保留一个文件夹…...

SpringCloudAlibaba-Seata2.0.0与Nacos2.2.1

一、下载 ## 下载seata wget https://github.com/apache/incubator-seata/releases/download/v2.0.0/seata-server-2.0.0.tar.gz## 解压 tar zxvf seata-server-2.0.0.tar.gz二、执行sql文件 ## 取出sql文件执行 cd /seata/script/server/db/mysql ## 找个mysql数据库执行三、…...

【编程语言】C++和C的异同点

文章目录 相同点不同点cin和scanf()结构体struct指针:NULL、nullptr、void* 有一段时间没有发博客了,从笔记里摘录一些发两篇。 相同点 C有很多从C继承过来的东西,因此C书(《C Primer》、《C Primer Plus》)中有一些基础的东西讲的并没有C书…...

【日常记录】【插件】excel.js导出的时候给单元格设置下拉选择、数据校验等

文章目录 1. 代码基本结构2. 导出的excel 某单元格的值设置为下拉选择3. 如何把下拉选择项设置为动态4. 单元格设置校验、提示5. 在WPS上的设置 1. 代码基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…...

分布式 I/O 系统Modbus TCP 耦合器BL200

BL200 耦合器是一个数据采集和控制系统&#xff0c;基于强大的 32 位微处理器设计&#xff0c;采用 Linux 操作系统&#xff0c;可以快速接入现场 PLC、SCADA 以及 ERP 系统&#xff0c; 内置逻辑控制、边缘计算应用&#xff0c;支持标准 Modbus TCP 服务器通讯&#xff0c;以太…...

人工智能导论-机器学习

机器学习概述 概述 本章主要介绍的机器学习的概念、发展历程、发展趋势、相关应用&#xff0c;着重拓展机监督学习和无监督学习的相关知识。 重点&#xff1a;机器学习的定义和应用&#xff1b; 难点&#xff1a;机器学习算法及分类。 机器学习 - 重要性 MachineLeaning出…...

计算机网络——网络层(路由选择协议、路由器工作原理、IP多播、虚拟专用网和网络地址转换)

目录 路由选择协议 因特网的路由选择协议特点 路由信息协议RIP RIP衡量目的网络距离 RIP选择路由器的方式 RIP具有以下三个重要特点 RIP的基本工作流程 RIP的距离向量算法 ​编辑 ​编辑 RIP存在的问题——“坏消息传播得慢” RIP的封装 开放最短路径优先协议OSPF…...

对接企业微信API自建应用配置企业可信IP

前言 为了实现系统调用团队会议功能&#xff0c;组织发起企业微信会议&#xff0c;于是需要和企业微信做API对接。对接过程很难受&#xff0c;文档不清晰、没有SDK、没有技术支持甚至文档报文和实际接口报文都不匹配&#xff0c;只能说企业微信的API是从业以来见过的最难用的AP…...

Windows右键新建Markdown文件类型配置 | Typora | VSCode

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 今天毛毛张分享的是如何在右键的新建菜单中添加新建MarkdownFile文件&#xff0c;这是毛毛张分享的关于Typora软件的相关知识的第三期 文章目录 1.前言&#x1f3dd;…...

PyTorch构建一个肺部CT图像分类模型来分辨肺癌

当你有5万个标注的肺部CT DICOM图像数据&#xff0c;并且希望使用PyTorch构建一个肺部CT图像分类模型来分辨肺癌&#xff0c;以下是详细的步骤和示例代码&#xff1a; 数据准备 首先&#xff0c;确保你的数据集被正确分为训练集、验证集和测试集&#xff0c;并且每个图像都有相…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...