(C++)引用的用法总结
引用(reference)是C++极为重要的一部分,本文对其用法进行简单总结。
1. 引用的基本用法
引用的关键字为&,表示取地址的意思,引用变量定义如下:
int m = 1;
int &n = m; //定义
cout<<"n=:"<<n<<" m="<<m<<endl;
cout<<&n<<" "<<&m<<endl;
n = 2; //修改
输出为:
n=:2 m=2
0x75fe78 0x75fe78
从结果可以看出来,变量n和m地址是一样的,而且修改n,m也会改变,这与指针有这异曲同工之妙。可以理解把引用为数据的另一个称呼。
引用要在定义的时候就赋值,并且不能再去引用别的变量,这一点和常指针类似(指向不变的指针)。引用变量在使用的时候直接使用变量名即可,不用带&,带上&表示取地址。
2. 引用作为形参
将引用变量作为函数的形参,与指针作为形参类似,可以在函数内部对输入参数进行修改。
#include <iostream>
using namespace std;void swap(int &m, int &n) {int temp = m;m = n;n = temp;
}
int main(){int a = 1, b = 100;cout<<"before: a="<<a<<", b="<<b<<endl;swap(a,b);cout<<"after: a="<<a<<", b="<<b<<endl;
}
输出:
before: a=1, b=100
after: a=100, b=1
引用变量在使用的时候似乎比指针简洁一些,变量本身就代表了引用的数据,而指针则需要加上*。
3. 引用与指针的区别
引用和指针都可以对被引用(指向)数据进行操作,具有相似的功能,不过还是有一些区别:
①引用必须从一而终,不能再指向其他数据;指针可以随意改变指向。
②int & const p = a是非法的,因为引用本身就自带有“常量”的属性,不用再刻意限制;而int * const p = &a是合法。此外,虽然int & const p = a不合法,但是const int & p = a依旧是合法的,意思是引用的数据不可修改。
③指针可以有多级,引用不可以。int **p = &a合法,int &&p = a非法。
关于指针和引用的区别,有人认为引用其实就是指针的简单封装,而且引用是占有内存的,但是无法获取地址,不是简单的一份数据两个名字。因为如果在类中定义引用变量,用sizeof可以计算出引用确实占用了内存。为啥无法获取引用本身的地址,解释是编译器不想让我们获取。
4. const 引用
void swap(int &m, int &n) {int temp = m;m = n;n = temp;
}
int main(){int a = 1, b = 2;int &a1 = a; //合法int &a2 = a + 1; //非法int &a3 = a + b; //非法swap(a+1,a); //非法
}
从上边代码可以看到,不能引用临时变量,临时变量一般是表达式形式的,一般会储存在寄存器上且无法修改,寄存器是无法寻址的,所以也无法引用(指针也一样),同样,临时变量也不能作为实参传给引用形参。
这种限制,会使引用在使用的时候很不方便,但是借助const关键字,可以解决这一问题。在引用变量前边添加const关键字,就是告诉编译器,我不会去修改你的临时变量,编译器就会为临时变量分配内存,于是引用就可以用了(指针不行)。
void swap(const int &m, const int &n) {}
int main(){int a = 1, b = 2;int &a1 = a;const int &a2 = a + 1;const int &a3 = a + b;swap(a+1,a);
}
添加const后,这些代码就不会报错了。
相关文章:
(C++)引用的用法总结
引用(reference)是C极为重要的一部分,本文对其用法进行简单总结。 1. 引用的基本用法 引用的关键字为&,表示取地址的意思,引用变量定义如下: int m 1; int &n m; //定义 cout<<"n:…...
Charles:移动端抓包 / windows客户端 iOS手机 / 手机访问PC本地项目做调试
一、背景描述 1.1、本文需求:移动端进行抓包调试 1.2、理解Charles可以做什么 Charles是一款跨平台的网络代理软件,可以用于捕获和分析网络流量,对HTTP、HTTPS、HTTP/2等协议进行调试和监控。使用Charles可以帮助开发人员进行Web开发、调试…...
【AI】深度学习——人工智能、深度学习与神经网络
文章目录 0.1 如何开发一个AI系统0.2 表示学习(特征处理)0.2.1 传统特征学习特征选择过滤式包裹式 L 1 L_1 L1 正则化 特征抽取监督的特征学习无监督的特征学习 特征工程作用 0.2.2 语义鸿沟0.2.3 表示方式关联 0.2.4 表示学习对比 0.3 深度学习0.3.1 表示学习与深度学习0.3.…...
RK3288:BT656 RN6752调试
这篇文章主要想介绍一下再RK3288平台上面调试BT656 video in的注意事项。以RN6752转接芯片,android10平台为例进行介绍。 目录 1. RK3288 VIDEO INPUT 并口 2. 驱动调试 2.1 RN6752 驱动实现 ①rn6752_g_mbus_config总线相关配置 ②rn6752_querystd配置制式 …...
LLMs 蒸馏, 量化精度, 剪枝 模型优化以用于部署 Model optimizations for deployment
现在,您已经了解了如何调整和对齐大型语言模型以适应您的任务,让我们讨论一下将模型集成到应用程序中需要考虑的事项。 在这个阶段有许多重要的问题需要问。第一组问题与您的LLM在部署中的功能有关。您需要模型生成完成的速度有多快?您有多…...
Milvus踩坑笔记
本文用于记录在学习 Milvus文档时所遇到的一些Bug或报错及解决方法 参考文章: 官方demo:在Dynamic Schema的集合中插入数据 报错1:auto id enabled, id shouldnt in entities[0] 问题描述 此报错出现在Milvus官方在介绍 Dynamic Schema …...
什么是轴电流?轴电流对轴承有什么危害?
根据同步发电机结构及工作原理,由于定子铁芯组合缝、定子硅钢片接缝,定子与转子空气间隙不均匀,轴中心与磁场中心不一致等,机组的主轴不可避免地要在一个不完全对称的磁场中旋转。这样,在轴两端就会产生一个交流电压。…...
react create-react-app v5配置 px2rem (不暴露 eject方式)
环境信息: create-react-app v5 “react”: “^18.2.0” “postcss-plugin-px2rem”: “^0.8.1” 配置步骤: 不暴露 eject 配置自己的webpack: 1.下载react-app-rewired 和 customize-cra-5 npm install react-app-rewired customize-cra…...
.net中用标志位解决socket粘包问题
以下为wpf中, 用标志位"q" 解决粘包问题 using MyFrameWorkWpf.Entities; using System.Collections.ObjectModel; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.…...
【Ubuntu】Systemctl 管理 MinIO 服务器的启动和停止
要使用 systemctl 来管理 MinIO 服务器的启动和停止,您需要创建一个 systemd 服务单元文件,以便 systemd 能够启动和停止 MinIO 服务器。下面是一般的步骤: 创建 systemd 服务单元文件: 打开终端并使用文本编辑器创建一个新的 sys…...
《golang设计模式》第二部分·结构型模式-07-代理模式(Proxy)
文章目录 1. 概述1.1 角色1.2 模式类图 2. 代码示例2.1 设计2.2 代码2.3 示例类图 1. 概述 代理(Proxy)是用于控制客户端访问目标对象的占位对象。 需求:在调用接口实现真是主题之前需要一些提前处理。 解决:写一个代理ÿ…...
Jmeter常用线程组设置策略
一、前言 在JMeter压力测试中,我们时常见到的几个场景有:单场景基准测试、单场景并发测试、单场景容量测试、混合场景容量测试、混合场景并发测试以及混合场景稳定性测试 在本篇文章中,我们会用到一些插件,在这边先给大家列出&…...
【Spring】Spring MVC 程序开发
Spring MVC 程序开发 一. 什么是 Spring MVC1. MVC2. Spring、Spring Boot 与 Spring MVC 二. 创建 Spring MVC 项目1. 创建项目2. 用户和程序的映射3. 获取用户请求参数①. 获取单个参数②. 获取多个参数③. 传递对象④. 后端参数重命名(后端参数映射)R…...
如何在企业网站里做好网络安全
在当今数字时代,网站不仅仅是企业宣传和产品展示的平台,更是日常生活和商业活动中不可或缺的一部分。然而,随着网络技术不断发展,网站的安全问题日益凸显。保护网站和用户数据的安全已经成为至关重要的任务,以下是一些…...
windows server 2012 服务器打开系统远程功能
服务器上开启远程功能 进入服务器,选择“添加角色和功能” 需要选择安装的服务器类型,如图所示 然后在服务器池中选择你需要使用的服务器。 选择完成后,在图示列表下勾选“远程桌面服务” 再选择需要安装的功能和角色服务。 选择完成确认内容…...
智能工厂MES系统,终端设备支持手机、PDA、工业平板、PC
一、开源项目简介 源计划智能工厂MES系统(开源版) 功能包括销售管理,仓库管理,生产管理,质量管理,设备管理,条码追溯,财务管理,系统集成,移动端APP。 二、开源协议 使用GPL-3.0开…...
GPT的优势和GPT缺点
GPT,即Generative Pre-trained Transformer,是一种基于人工智能技术的自然语言处理模型。它采用了深度学习算法,可以通过大量的文本数据来学习自然语言的规律,并能够生成流畅、准确的语句。下面我们将探讨GPT技术的优势。 首先&a…...
微信小程序开发缺少中间证书问题(腾讯云、阿里云等做服务器)
项目使用nginx做负载均衡后,不再采用原来直接用jar包的方式直接开启对应端口,所以需要重新从云服务器上下载证书,写入到Nginx读取的证书路径上即可。...
动态代理初步了解
准备案例 需求 模拟某企业用户管理业务,需包含用户登录,用户删除,用户查询功能,并要统计每个功能的耗时。 分析与实现 定义一个UserService表示用户业务接口,规定必须完成用户登录,用户删除,…...
QT国际化
引入 在代码里面写中文就很low,运行时多语言切换是客户端程序都应该具备的。 qt国际化其实就是qt中字符串的字符集编码的设置。当然这个设置不是简单的选择一下什么语言就好,这个需要编程人员来处理的。 通常对于非拉丁字符(主要指latin1字符…...
Arm SVE2向量存储指令ST3Q/ST4Q详解与应用优化
1. SVE2向量存储指令概述在Armv9架构中,SVE2(Scalable Vector Extension 2)作为第二代可扩展向量指令集,引入了多项增强的向量处理能力。其中ST3Q和ST4Q指令是专门为高效存储三路和四路128位宽向量数据而设计的谓词化存储操作。这…...
【自用】Kicad 导入嘉立创元器件封装(NLBN插件)
总览 1.安装插件 2.下载元件封装 3.配置 Kicad 4.效果演示 零、特别鸣谢 感谢插件提供者:linkyourbin UP主教学视频:https://www.bilibili.com/video/BV1W6AXz2EfR/?spm_id_from333.337.search-card.all.click&vd_source38d6ea3466db371e6c07c24…...
Spark算子分类与特性解析
转换算子转换算子是Spark中最基础的算子类型,它们负责定义数据处理的逻辑,但不会立即执行计算。转换算子具有惰性求值特性,这意味着它们只是记录下数据转换的规则,而不会立即触发计算。常见的转换算子包括:map…...
CircuitPython库管理实战:从安装优化到API深度应用
1. 项目概述与核心价值在嵌入式硬件开发的世界里,CircuitPython以其极低的入门门槛和“即写即得”的交互体验,成为了连接创意与现实的绝佳桥梁。无论是点亮第一颗LED,还是驱动复杂的传感器网络,其丰富的库生态系统都是项目成功的基…...
CST仿真入门实战:Dipole天线结果解读与关键参数分析
1. Dipole天线仿真结果初探 第一次打开CST仿真软件完成Dipole天线仿真后,面对密密麻麻的结果图表,相信很多人都会感到无从下手。我刚开始接触电磁仿真时也是这样,盯着那些S参数曲线和远场辐射图发愣。其实读懂这些结果并不难,关键…...
STC8单片机按键事件处理代码实现
STC8单片机按键事件处理代码实现 【下载地址】STC8单片机按键事件处理代码实现 本仓库提供了一个用于STC8单片机的按键事件处理代码实现,支持按键的单击、双击和长按事件。该代码设计简洁,易于理解和移植,可以方便地应用于其他单片机平台。 …...
【亲测免费】 Realtek-RTD2660源代码:开启显示设备定制化的新纪元
Realtek-RTD2660源代码:开启显示设备定制化的新纪元 【下载地址】Realtek-RTD2660源代码源程序 本仓库提供Realtek-RTD2660源代码源程序的下载。该资源文件适用于7至19寸的显示设备,为开发者提供了完整的源代码,方便进行二次开发和定制 项目…...
C++/WinRT安全编程:Windows Runtime安全模型和最佳实践
C/WinRT安全编程:Windows Runtime安全模型和最佳实践 【免费下载链接】cppwinrt C/WinRT 项目地址: https://gitcode.com/gh_mirrors/cp/cppwinrt C/WinRT是Windows Runtime(WinRT)的现代C语言投影,它提供了类型安全的API访…...
嵌入式老鸟带你搞懂eMMC上电、下电时序:从Pre-Idle到HS400模式切换的完整流程解析
嵌入式系统eMMC深度解析:从硬件时序到Linux驱动的全链路设计 在嵌入式系统开发中,eMMC存储器的稳定性和性能优化往往是决定产品可靠性的关键因素之一。当开发板启动失败或存储性能不达标时,很多工程师会首先怀疑软件问题,却忽略了…...
AI智能体的测试
测试AI智能体(AI Agent)与测试传统的确定性软件有本质的区别。传统软件测试关注的是“输入 A,是否必然输出 B”;而 AI Agent 具备自主规划、工具调用、长期记忆和非确定性生成的能力,这导致它的测试维度更广、复杂度更…...
