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

UE学习日志#19 C++笔记#5 基础复习5 引用1

        C++中的引用(reference)是另一个变量的别名。对引用的所有修改都会更改其引用的变量的值。可以将引用视为隐式指针,它省去了获取变量地址和解引用指针的麻烦。另外,可以将引用视为原始变量的另一个名称。可以创建独立的引用变量,在类中使用引用数据成员,接受引用作为函数和方法的参数,并从函数和方法返回引用。

1 引用变量

1.1 引用变量必须总是在创建时被初始化

        引用变量必须在创建时被初始化,例如:

int x {3};
int& xRef {x};

        给类型附加一个&,则指示相应的变量是一个引用。它仍然像正常变量一样被使用,但是在幕后,它实际上是指向原始变量的指针。变量x 和引用变量xRef指向同一个值,也就是说,xRef只是x 的另一个名称。如果通过其中一个更改值,则也可在另一个中看到更改。例如,以下代码通过 xRef 将x 设置为10:

xRef = 10;

        不允许在类定义之外声明一个引用而不对其进行初始化。

int& emptyRef: // DOES NOT COMPILE!

        引用变量必须总是在创建时被初始化。


1.2 修改引用
        

        引用始终指向它初始化时的那个变量,引用一旦创建便无法更改。如果在声明引用时将变量赋值给引用,则引用指向该变量。但是,如果之后将变量赋值给引用,则引用所指向的变量会更改为赋值的变量的值。原来的引用不会改为指向新的变量。示例:

int x{3},y{4};
int& xRef{x};
xRef=y;//Change value of x to 4.Doesn't make xRef refer to y.

        可以尝试使用y的地址对 xRef赋值来规避此限制。

xRef = &y; // DOES NOT COMPILE!

        这句代码会编译失败。y的地址是一个指针,但是xRef 被声明为一个对 int 的引用,而不是对指针的引用。

int x{3},z{5};
int& xRef{x};
int& zRef{z};
zRef=xRef;

        这个示例的最后一行会把z的值设为3,而不会改变引用。

1.3 const引用

        应用于引用的 const 通常比应用于指针的 const容易,这有两个原因。首先,引用默认是 const,因为你不能更改它们的指向。因此,不需要显式标记它们为const。其次。你无法创建对引用的引用,因此通常只有一个间接引用级别。获得多个间接级别的唯一方法是创建对指针的引用。
        因此,当C++程序员提起const 引用时,他们的意思是这样的:

int z; 
const int& zRef {z};
zRef = 4; // DOES NOT COMPILE

        通过将 const 应用于 int&,可以阻止对 zRef 的赋值,如上所示。类似于指针,const int& zRef等价于 int const& zRef。但是要注意,将zRef 标记为 const 对z无效。仍然可以通过直接更改z的值而不是通过引用来更改z的值。
        不能创建对未命名值的引用,例如整数字面量,除非该引用是 const 值。在下面的示例中,unnamedRefl会编译失败,因为它是对非 const 的引用,却指向了一个常量。那意味着你可以更改常数5的值,这没有任何意义。unnamedRef2 之所以有效,是因为它是 const 引用,因此不能编写例如unnamedRef2 =7这样的代码。

int& unnamedRef1{ 5 };// DOES NOT COMPILE
const int& unnamedRef2 { 5 };// Works as expected

        临时对象也是如此。不能为临时对象创建对非 const的引用,但是 const 引用是可以的。例如,假设具有以下返回 std:string 对象的函数:

string getString() ( return "Hello world!"; }

        可以为 getString()的结果创建一个 const 引用,该引用将使临时 std::string 对象保持生命周期,直到该引用超出作用域。

string& stringl { getString() } ;// DOES NOT COMPILE
const string& string2 { getString() };// Works as expected

1.4 指针的引用和引用的指针

        可以创建对任何类型的引用,包括指针类型。这是对指向 int的指针的引用的示例:

int* intP {nullptr};
int*& ptrRef {intP};
ptrRef=new int;
*ptrRef=5;

        取一个引用的地址与取该引用所指向的变量的地址得到的结果是相同的。

        不能声明对引用的引用或对引用的指针。

1.5 结构化绑定和引用

auto& [theString,theInt]{myPair};
const auto& [theString,theInt]{myPair};

2 引用数据成员

        类的数据成员可以是引用。但是不能在类的构造函数的函数体内部进行初始化,必须在所谓的构造函数初始化器中进行初始化。例如:

class MyClass{public:MyClass(int& ref):m_ref{ref}{<body>}private:int& m_ref;
}

3 引用作为函数参数

        默认是值传递,加上&后是引用传递。

(未完待续)

相关文章:

UE学习日志#19 C++笔记#5 基础复习5 引用1

C中的引用&#xff08;reference&#xff09;是另一个变量的别名。对引用的所有修改都会更改其引用的变量的值。可以将引用视为隐式指针&#xff0c;它省去了获取变量地址和解引用指针的麻烦。另外&#xff0c;可以将引用视为原始变量的另一个名称。可以创建独立的引用变量&…...

PHP代码审计学习02

目录 代码审计一般思路 Beescms代码审计&#xff08;upload&#xff09; Finecms基于前台MVC任意文件上传挖掘思路 CLTPHP基于thinkphp5框架的文件上传挖掘思路 今天来看PHP有框架MVC类&#xff0c;文件上传&#xff0c;断点调试挖掘。 同样还是有关键字搜索和功能点抓包两…...

2025年02月02日Github流行趋势

项目名称&#xff1a;oumi 项目地址url&#xff1a;https://github.com/oumi-ai/oumi 项目语言&#xff1a;Python 历史star数&#xff1a;1416 今日star数&#xff1a;205 项目维护者&#xff1a;xrdaukar, oelachqar, taenin, wizeng23, kaisopos 项目简介&#xff1a;构建最…...

vue入门到实战 三

目录 3.1 v-bind 3.1.1 v-bind指令用法 ​编辑3.1.2 使用v-bind绑定class 3.1.3 使用v-bind绑定style 3.2.1 v-if指令 3.2.1 v-if指令 3.2.2 v-show指令 ​3.3 列表渲染指令v-for 3.3.1 基本用法 3.3.2 数组更新 3.3.3 过滤与排序 3.4 事件处理 3.4.1 使用v-on指令…...

[创业之路-271]:站在管理的角度看计算机操作系统,OS是技术思想与管理思想的完美融合,是物理世界和数字化虚拟世界的桥梁

一、前言&#xff1a; Operating System&#xff0c;站在终端用户的角度&#xff0c;翻译成了"操作系统"&#xff0c;但站在计算机系统本身角度&#xff0c;翻译成"运营系统"更合适&#xff0c;是指它是负责运营计算机所有的硬件&#xff08;物理&#xf…...

实验六 项目二 简易信号发生器的设计与实现 (HEU)

声明&#xff1a;代码部分使用了AI工具 实验六 综合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 实验项目 要求利用硬件描述语言Verilog&#xff08;或VHDL&#xff09;、图形描述方式、IP核&#xff0c;结合数字系统设计方法&#xff0c;在Quartus开发环境下&#xff…...

java SSM框架 商城系统源码(含数据库脚本)

商城购物功能&#xff0c;项目代码&#xff0c;mysql脚本&#xff0c;html等静态资源在压缩包里面 注册界面 登陆界面 商城首页 文件列表 shop/.classpath , 1768 shop/.project , 1440 shop/.settings/.jsdtscope , 639 shop/.settings/org.eclipse.core.resources.prefs , …...

Unet 改进:在encoder和decoder间加入TransformerBlock

目录 1. TransformerBlock 2. Unet 改进 3. 完整代码 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. TransformerBlock TransformerBlock是Transformer模型架构的基本组件,广泛应用于机器翻译、文本摘要和情感分析等自然语言处理任务…...

【黄啊码】DeepSeek提示词大道至简版

1.1 有效提问的五个黄金法 法则一&#xff1a;明确需求 错误示例&#xff1a; Γ帮我写点东西」 正确姿势&#xff1a; Γ我需要一封求职邮件&#xff0c;应聘新媒体运营岗位&#xff0c;强调B年公众号运营经验 法则二&#xff1a;提供背景 错误示例 &#xff1a; Γ分析这个…...

【Linux系统】信号:认识信号 与 信号的产生

信号快速认识 1、生活角度的信号 异步&#xff1a;你是老师正在上课&#xff0c;突然有个电话过来资料到了&#xff0c;你安排小明过去取资料&#xff0c;然后继续上课&#xff0c;则小明取资料这个过程就是异步的 同步&#xff1a;小明取快递&#xff0c;你停下等待小明回来再…...

一、html笔记

(一)前端概述 1、定义 前端是Web应用程序的前台部分,运行在PC端、移动端等浏览器上,展现给用户浏览的网页。通过HTML、CSS、JavaScript等技术实现,是用户能够直接看到和操作的界面部分。上网就是下载html文档,浏览器是一个解释器,运行从服务器下载的html文件,解析html、…...

C# 数组和列表的基本知识及 LINQ 查询

数组和列表的基本知识及 LINQ 查询 一、基本知识二、引用命名空间声明三、数组3.1、一维数组3.2、二维数组3.3、不规则数组 Jagged Array 四、列表 List4.1、一维列表4.2、二维列表 五、数组和列表使用 LINQ的操作和运算5.1、一维 LIST 删除所有含 double.NaN 的行5.2、一维 LI…...

PyQt5超详细教程终篇

PyQt5超详细教程 前言 接&#xff1a; [【Python篇】PyQt5 超详细教程——由入门到精通&#xff08;序篇&#xff09;](【Python篇】PyQt5 超详细教程——由入门到精通&#xff08;序篇&#xff09;-CSDN博客) 建议把代码复制到pycahrm等IDE上面看实际效果&#xff0c;方便理…...

【llm对话系统】大模型 Llama 源码分析之归一化方法 RMS Norm

1. 引言 在深度学习中&#xff0c;归一化 (Normalization) 是一种常用的技术&#xff0c;它可以加速模型的训练并提高模型的性能。常见的归一化方法包括 Batch Normalization (BatchNorm)、Layer Normalization (LayerNorm) 等。Llama 模型采用了一种称为 RMS Norm 的归一化方…...

Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南:让Docker拥抱GPU

Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南&#xff1a;让Docker拥抱GPU 前言一、环境准备1.1 验证驱动状态 二、安装NVIDIA Container Toolkit2.1 添加官方仓库2.2 执行安装 三、配置Docker运行时3.1 更新Docker配置 四、验证安装结果4.1 运行测试容器 五、实战应用 …...

青少年编程与数学 02-008 Pyhon语言编程基础 15课题、运用函数

青少年编程与数学 02-008 Pyhon语言编程基础 15课题、运用函数 一、函数的运用1. 问题分解2. 定义函数接口3. 实现函数4. 测试函数5. 组合函数6. 处理错误和异常7. 优化和重构示例&#xff1a;使用函数解决复杂数学问题 二、递归三、递归函数1. 确定基本情况&#xff08;Base C…...

ARM TEE

在ARM的语境中&#xff0c;TEE是Trusted Execution Environment&#xff08;可信执行环境&#xff09;的缩写。ARM TEE就是基于ARM架构实现的可信执行环境&#xff0c;以下是具体介绍&#xff1a; 定义与原理 定义&#xff1a;ARM TEE是基于独立硬件&#xff0c;和主操作系统…...

洛谷 P8724 [蓝桥杯 2020 省 AB3] 限高杆

洛谷题目传送门 题目描述 某市有 n 个路口&#xff0c;有 m 段道路连接这些路口&#xff0c;组成了该市的公路系统。其中一段道路两端一定连接两个不同的路口。道路中间不会穿过路口。 由于各种原因&#xff0c;在一部分道路的中间设置了一些限高杆&#xff0c;有限高杆的路…...

虚幻UE5手机安卓Android Studio开发设置2025

一、下载Android Studio历史版本 步骤1&#xff1a;虚幻4.27、5.0、5.1、5.2官方要求Andrd Studio 4.0版本&#xff1b; 5.3、5.4、5.5官方要求的版本为Android Studio Flamingo | 2022.2.1 Patch 2 May 24, 2023 虚幻官网查看对应Andrd Studiob下载版本&#xff1a; https:/…...

JavaWeb入门-请求响应(Day3)

(一)请求响应概述 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器就可访问,应用程序的逻辑和数据都存储在服务端(维护方便,响应速度一般) CS架构:Client/ser…...

【Rust】18.2. 可辩驳性:模式是否会无法匹配

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 18.2.1. 模式的两种形式 模式有两种形式&#xff1a; 可辩驳的&#xff08;可失败的&…...

【SLAM】于AutoDL云上GPU运行GCNv2_SLAM的记录

配置GCNv2_SLAM所需环境并实现AutoDL云端运行项目的全过程记录。 1. 引子 前几天写了一篇在本地虚拟机里面CPU运行GCNv2_SLAM项目的博客&#xff1a;链接&#xff0c;关于GCNv2_SLAM项目相关的介绍请移步此文章&#xff0c;本文不再重复说明。 GCNv2: Efficient Corresponde…...

SQL进阶实战技巧:某芯片工厂设备任务排产调度分析 | 间隙分析技术应用

目录 0 技术定义与核心原理 1 场景描述 2 数据准备 3 间隙分析法 步骤1:原始时间线可视化...

【自然语言处理(NLP)】基于Transformer架构的预训练语言模型:BERT 训练之数据集处理、训练代码实现

文章目录 介绍BERT 训练之数据集处理BERT 原理及模型代码实现数据集处理导包加载数据生成下一句预测任务的数据从段落中获取nsp数据生成遮蔽语言模型任务的数据从token中获取mlm数据将文本转换为预训练数据集创建Dataset加载WikiText-2数据集 BERT 训练代码实现导包加载数据构建…...

Kotlin判空辅助工具

1&#xff09;?.操作符 //执行逻辑 if (person ! null) {person.doSomething() } //表达式 person?.doSomething() 2&#xff09;?:操作符 //执行逻辑 val c if (a ! null) {a } else {b } //表达式 val c a ?: b 3&#xff09;!!表达式 var message: String? &qu…...

41【文件名的编码规则】

我们在学习的过程中&#xff0c;写出数据或读取数据时需要考虑编码类型 火山采用&#xff1a;UTF-16 易语言采用&#xff1a;GBK php采用&#xff1a;UTF-8 那么我们写出的文件名应该是何种编码的&#xff1f;比如火山程序向本地写出一个“测试.txt”&#xff0c;理论上这个“测…...

使用MATLAB进行雷达数据采集可视化

本文使用轮趣科技N10雷达&#xff0c;需要源码可在后台私信或者资源自取 1. 项目概述 本项目旨在通过 MATLAB 读取 N10 激光雷达 的数据&#xff0c;并进行 实时 3D 点云可视化。数据通过 串口 传输&#xff0c;并经过解析后转换为 三维坐标点&#xff0c;最终使用 pcplayer 进…...

深入解析 CSS 中不常用属性及其相互作用

深入解析 CSS 中不常用属性及其相互作用 **1. CSS 自定义属性&#xff08;CSS Variables&#xff09;****属性示例****作用****布局相关的作用** **2. box-sizing: border-box;****属性示例****作用****布局相关的作用** **3. Flexbox 布局****属性示例****作用****布局相关的作…...

JPA中基本类型集合的映射与操作实例

在Java Persistence API&#xff08;JPA&#xff09;中&#xff0c;我们经常会遇到需要将基本类型集合&#xff08;如List或Set&#xff09;持久化到数据库中的场景。JPA通过ElementCollection注解为我们提供了一种简单而强大的方式来实现这一功能。本文将详细介绍如何使用Elem…...

[MySQL]事务的理论、属性与常见操作

目录 一、事物的理论 1.什么是事务 2.事务的属性&#xff08;ACID&#xff09; 3.再谈事务的本质 4.为什么要有事务 二、事务的操作 1.事务的支持版本 2.事务的提交模式 介绍 自动提交模式 手动提交模式 3.事务的操作 4.事务的操作演示 验证事务的回滚 事务异常…...