C++ Reference:解锁编程新姿势

目录

一、C++ Reference 初相识

二、深入理解 C++ Reference

(一)引用是什么

(二)引用的语法规则

(三)引用的类型

1. 基本数据类型引用

2. 结构体类型引用

3. 指针类型引用

三、C++ Reference 的应用场景

(一)函数参数传递

(二)实现多态性

(三)作为函数返回值

(四)操作符重载相关

四、C++ Reference 与指针的区别

(一)是否存在空值

(二)能否更改指向

(三)初始化时机

五、使用 C++ Reference 的注意事项

六、总结回顾


一、C++ Reference 初相识

        在 C++ 的精彩世界里,C++ Reference 绝对是一个不可忽视的重要概念,毫不夸张地说,它堪称学习 C++ 的 “秘籍”。对于每一个想要在 C++ 领域有所建树的开发者而言,深入理解和熟练运用 C++ Reference 都是至关重要的,它能让你的代码更加高效、简洁且安全。

        那么,C++ Reference 究竟是什么呢?简单来说,引用就是给已存在的变量起一个别名,对引用的操作实际上就是对原变量的操作。例如,你有一个变量int num = 10; ,如果你定义 int &ref_num = num; ,那么ref_num就是num的引用,改变ref_num的值,num的值也会相应改变 ,反之亦然,因为它们本质上指向的是同一块内存空间。就好比你有一个好朋友叫小明,大家也常常称呼他为 “学霸小明”,不管是叫 “小明” 还是 “学霸小明”,指的都是同一个人。 这一特性使得 C++ Reference 在很多场景下都能发挥独特的作用。

二、深入理解 C++ Reference

(一)引用是什么

        引用的本质是变量的别名,这就好比一个人除了身份证上的正式名字,还有日常大家称呼的昵称 。在 C++ 中,当你定义了一个引用,就相当于给已存在的变量取了一个别名,对引用的任何操作,实际上就是对原变量的操作,它们共享同一块内存空间。例如,定义一个整型变量int num = 10; ,再定义int &ref_num = num; ,此时ref_num就是num的引用,对ref_num进行赋值操作,num的值也会相应改变,因为它们在内存中指向的是同一个位置,就像你叫小明的昵称和叫他的大名,都是在指代同一个人。

(二)引用的语法规则

        在 C++ 中,引用的语法规则有着严格的要求。首先,引用在定义时必须进行初始化,这是引用的一个重要特性。例如int a = 5; int &ref_a = a; ,这里在定义引用ref_a的同时将其初始化为变量a,这样ref_a就成为了a的别名。如果尝试定义一个未初始化的引用,如int &ref; ,编译器会报错,因为这不符合引用的语法规则。

        一旦引用被初始化,它就不能再更改指向,始终绑定到初始化时的那个变量。例如,定义int b = 10; ,然后int &ref_b = b; ,之后就不能再让ref_b指向其他变量,即使再定义int c = 20; ,也不能执行ref_b = c; 这样的操作,因为这并不是改变ref_b的指向,而是将c的值赋给了ref_b,也就是赋给了b。

        另外,在外部引用定义时不必赋予初值,例如在函数外部定义引用时,可以先声明,然后在合适的地方进行初始化。不过这种情况相对较少,更多时候我们还是在定义引用的同时进行初始化 。通过这些语法规则,我们能更准确地使用引用,发挥其在 C++ 编程中的优势。

(三)引用的类型

        在 C++ 中,引用的类型丰富多样,不同类型的引用在不同的编程场景中发挥着重要作用,下面来深入了解一下。

1. 基本数据类型引用

        基本数据类型的引用是最常见的引用类型之一。定义格式为[类型名] &[引用名]=[目标变量名]; 。例如,int num = 10; int &ref_num = num; ,这里ref_num就是int类型变量num的引用。通过引用和原变量对数据进行操作,二者会相互影响。比如对ref_num进行赋值操作ref_num = 20; ,此时num的值也会变为 20;同样,若对num进行修改,如num = 30; ,ref_num的值也会随之变为 30 。这种特性在很多需要对变量进行统一操作的场景中非常实用,能简化代码逻辑,提高代码的可读性和可维护性。

2. 结构体类型引用

        结构体类型引用在处理复杂数据结构时十分有用。其定义格式为[结构体类型名] &[引用名]=[目标变量名]; 。假设有如下结构体定义:

struct Student {std::string name;int age;float score;};

然后可以这样定义结构体类型的引用:

Student stu = {"Tom", 20, 85.5f};Student &ref_stu = stu;

        通过ref_stu可以像使用stu一样访问和修改结构体的成员,例如ref_stu.age = 21; ,这也会同时修改stu的age成员。在函数参数传递中,使用结构体类型引用可以避免结构体的拷贝,提高程序运行效率,特别是当结构体成员较多、占用内存较大时,这种优势更为明显。

3. 指针类型引用

        指针类型引用在指针操作场景中有着独特的应用。定义格式为[类型名] *&[指针引用名] = [目标指针名]; 。例如:

int num = 10;int *p_num = #int *

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM - CentOS上离线部署Ollama+Qwen2.5-coder模型完全指南

文章目录 离线安装OllamaOllama下载Ollama硬件需求Ollama 常用命令参考Ollama安装Ollama 服务管理&开机启动开启局域网访问 Ollama 服务 离线安装模型gguf 文件格式下载Qwen2.5-Coder-7B-Instruct-GGUF格式选择 ( gguf 版本 )构建Modelfile文件加载并运行离线模型测试 集成…

Linux——信号

目录 Linux——信号1.信号的基础了解2.技术应用角度的信号3.产生信号3.1按键组合3.2系统调用产生信号3.2.1 kill()3.2.2 raise()3.2.3 abort() 3.3**.** 软件条件产生信号3.4硬件异常产生信号3.4.1 /0异常3.4.2 内存越界异常 4.理解信号的存在5.总结一下6.核心转储7.全部信号都…

向量叉积的应用——正反画画

1 解题思路 解题思路涉及的向量积相关知识 c实现 #include<iostream> #include<vector>using namespace std;struct TrianglePoint {int x;int y; };int momentForce(TrianglePoint A, TrianglePoint B, TrianglePoint C) {//AB向量&#xff1a;(B.x-A.x, B.y-A.…

构建自定义MCP天气服务器:集成Claude for Desktop与实时天气数据

构建自定义MCP天气服务器:集成Claude for Desktop与实时天气数据 概述 本文将指导开发者构建一个MCP(Model Control Protocol)天气服务器,通过暴露get-alerts和get-forecast工具,为Claude for Desktop等客户端提供实时天气数据支持。该方案解决了传统LLM无法直接获取天气…

Web安全策略CSP详解与实践

引言 &#xff1a;在黑客攻击频发的今天&#xff0c;你的网站是否像“裸奔”一样毫无防护&#xff1f;跨站脚本&#xff08;XSS&#xff09;、数据注入等攻击随时可能让用户数据泄露。今天我们将揭秘一个网站的隐形保镖——内容安全策略&#xff08;CSP&#xff09;&#xff0c…

HC-05与HC-06蓝牙配对零基础教程 以及openmv识别及远程传输项目的概述

这个是上一年的项目&#xff0c;之前弄得不怎么完整&#xff0c;只有一个openmv的&#xff0c;所以openmv自己去我主页找&#xff0c;这篇主要讲蓝牙 这个是我在使用openmv连接单片机1然后单片机1与单片机2通过蓝牙进行通信 最终实现的效果是&#xff1a;openmv识别到图形和数…

点云分割方法

点云分割 通过判断三维距离&#xff0c;实现对创建3团点云的分割 通过判断三维距离&#xff0c;实现对创建3团点云的分割 * 点云1 gen_object_model_3d_from_points (rand(100), rand(100),rand(100), Points1)* 点云2 gen_object_model_3d_from_points (rand(100), 2rand(100…

SpringBoot3使用CompletableFuture时java.util.ConcurrentModificationException异常解决方案

问题描述 在Spring Boot 3项目中&#xff0c;使用CompletableFuture进行异步编程时&#xff0c;偶发{"code":500,"msg":"java.util.ConcurrentModificationException"}异常&#xff0c;但代码中并未直接操作List或CopyOnWriteArrayList等集合类…

细说卫星导航:测距定位原理

测距定位原理 1. 伪距测量技术 核心原理&#xff1a;卫星发射信号&#xff0c;用户接收并记录传播时间&#xff0c;乘以光速得到距离&#xff08;伪距&#xff09;。 技术细节&#xff1a; 信号传播路径分析 信号结构&#xff1a; 卫星信号包含三部分&#xff1a; 载波&…

Linux系统管理与编程09:任务驱动综合应用

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 [环境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境&#xff1a;Lamp&#xff08;linux httpd mysql8.0 php&#xff09; [步骤] 5 …

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿&#xff0c;亲爱的算法工程师们&#xff01;今天咱们聊一聊PDF解析的那些事儿&#xff0c;简直就像是在玩一场“信息捉迷藏”游戏&#xff01;PDF文档就像是个调皮的小精灵&#xff0c;表面上看起来规规矩矩&#xff0c;但当你想要从它那里提取信息时&#xff0c;它就开始跟…

RK3568 I2C底层驱动详解

前提须知&#xff1a;I2C协议不懂的话就去看之前的内容吧&#xff0c;这个文章需要读者一定的基础。 RK3568 I2C 简介 RK3568 支持 6 个独立 I2C: I2C0、I2C1、I2C2、I2C3、I2C4、I2C5。I2C 控制器支持以下特性: ① 兼容 i2c 总线 ② AMBA APB 从接口 ③ 支持 I2C 总线主模式…

UNIX网络编程笔记:基本TCP套接字编程

一、socket函数 一、socket函数核心参数与协议组合 函数原型与基本功能 #include <sys/socket.h> int socket(int family, int type, int protocol);• 功能&#xff1a;创建通信端点&#xff08;套接字&#xff09;&#xff0c;返回描述符供后续操作。 • 返回值&#…

JSON在AutoCAD二次开发中应用场景及具体案例

配置文件的读取 在AutoCAD插件开发中&#xff0c;可能需要生成、修改、读取配置文件中一些参数或设置。JSON格式的配置文件易于编写和修改&#xff0c;且可以方便地反序列化为对象进行使用。 运行后效果如下 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.Au…

自由学习记录(46)

CG语法的数据类型 // uint : 无符号整数&#xff08;32位&#xff09; // int : 有符号整数&#xff08;32位&#xff09; // float : 单精度浮点数&#xff08;32位&#xff09;&#xff0c;通常带后缀 f&#xff08;如 1.0f&#xff09; // half : 半精度浮…

解决Selenium滑动页面到指定元素,点击失效的问题

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:君失臣兮龙为鱼&#xff0c;权归臣兮鼠变虎&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4…

Vue基础

目录 -Vue基础- 1、插值表达式 {{}} 2、Vue核心特性&#xff1a;响应式 3、开发者工具Vue Devtools(极简插件下载) 4、Vue指令 v-text v-html v-bind v-on v-if v-show v-for v-model 5、Vue指令修饰符 .stop .prevent .capture .self .once .enter、.tab、…

收数据花式画图plt实战

目录 Python plt想把纵坐标化成对数形式代码 子图ax. 我又有ax scatter&#xff0c;又有ax plot&#xff0c;都要去对数 数字接近0&#xff0c;取对数没有定义&#xff0c;怎么办 创建数据 添加一个小的常数以避免对数未定义的问题 创建一个figure和一个子图ax 在子图a…

二项式分布(Binomial Distribution)

二项式分布&#xff08;Binomial Distribution&#xff09; 定义 让我们来看看玩板球这个例子。假设你今天赢了一场比赛&#xff0c;这表示一个成功的事件。你再比了一场&#xff0c;但你输了。如果你今天赢了一场比赛&#xff0c;但这并不表示你明天肯定会赢。我们来分配一个…

【算法工程】大模型开发之windows环境的各种安装

1. 背景 最近由于研究需要&#xff0c;我购置了两块3090显卡&#xff0c;以便在家中进行一些小规模的实验。为此&#xff0c;还更换了主机。当然&#xff0c;新系统上少不了要安装各种开发环境。从开发体验来看&#xff0c;macOS无疑更为流畅&#xff0c;但为了确保所有环境都能…