1. 引用(Reference)

在 C++ 中,引用(Reference)是一个变量的别名. 它允许你通过不同的名字访问同一个变量. 与指针不同,引用在定义时必须被初始化,并且一旦绑定到某个变量,之后不能更改引用的绑定对象.

引用的语法

引用(Reference)是 C++ 中的一种重要特性,提供了对现有变量的另一种名称或别名. 引用与指针类似,但它们更简洁且更安全,因为引用总是指向一个有效的对象,并且无法更改所指向的对象.

引用的语法

定义引用的基本语法如下:

type &refName = varName;

type:引用的类型,必须与所引用的变量的类型相同

&:表示这是一个引用

refName:引用的名称

varName:被引用的变量的名称

这样写也许更加直观:

int a = 10;    // 定义一个整数变量 a
int &ref = a; // 定义一个引用 ref,绑定到变量 a

在上面的代码中,refa 的引用. 现在,refa 指向同一个内存位置,任何对 ref 的操作实际上都是对 a 的操作

使用引用的优点:

简洁性:引用的语法更接近直接操作对象

安全性:引用总是指向一个有效对象,避免了空指针问题.

效率:引用避免了复制对象,尤其对于大对象而言,这可以提高性能

引用的特点

  1. 必须初始化:引用在声明时必须初始化.
  2. 不能改变绑定:一旦引用被初始化后,就不能再指向其他变量.
  3. 不占用额外内存:引用本质上是变量的别名,不占用额外内存.

示例代码

以下是一个简单的示例,展示了引用的用法:

#include <iostream>
using namespace std; void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
} int main() {
int x = 10;
int y = 20;
cout << "Before swap: x = " << x << ", y = " << y << endl;
swap(x, y);
cout << "After swap: x = " << x << ", y = " << y << endl;
return 0;
}

在这个例子中,swap 函数使用引用来交换两个整数的值

2. 引用的语法解释

在 C++ 中,引用(Reference)是一个变量的别名,而不是地址. 再次看看这段代码:

int a = 10;    // 定义一个整数变量 a
int &ref = a; // 定义一个引用 ref,绑定到变量 a

在这段代码中:

  • int &ref = a; 的意思是 ref 是一个 int 类型的引用,它绑定到变量 a. 此时,refa 是同一个变量的不同名字,对 ref 的任何操作都会影响 a,反之亦然.

引用和指针的区别在于:

  • 引用:是变量的别名,必须在定义时初始化,并且一旦绑定到某个变量,就不能再改变引用的绑定对象。语法上更简洁,不需要解引用操作。
  • 指针:是存储变量地址的变量,可以在任何时候指向不同的对象,需要通过解引用操作符(*)来访问指针指向的变量。

示例代码:

int a = 10;     // 定义一个整数变量 a
int &ref = a; // 定义一个引用 ref,绑定到变量 a cout << "a: " << a << endl; // 输出 a 的值
cout << "ref: " << ref << endl; // 输出 ref 的值 ref = 20; // 通过引用修改 a 的值 cout << "a: " << a << endl; // 输出 a 的新值
cout << "ref: " << ref << endl; // 输出 ref 的新值

输出结果:

a: 10
ref: 10
a: 20
ref: 20

在这个例子中,refa 始终表示同一个变量,对 ref 的修改直接影响 a

C++中的引用(Reference)的更多相关文章

  1. Object-C中对“引用(reference)”的理解

    http://blog.csdn.net/csz0102/article/details/25984275 注:以下讨论都是在ARC模式下 我们在iOS开发中最经常碰到的“引用(reference)” ...

  2. Java中各种引用(Reference)解析

    目录 1,引用类型 2, FinalReference 2.1, Finalizer 3, SoftReference 4, WeakReference 5, PhantomReference 6, ...

  3. How do I duplicate a resource reference in code behind in WPF?如何在WPF后台代码中中复制引用的资源?

    原文 https://stackoverflow.com/questions/28240528/how-do-i-duplicate-a-resource-reference-in-code-behi ...

  4. 浅谈Java中的引用

    在Java语言中,引用是指,某一个数据,代表的是另外一块内存的的起始地址,那么我们就称这个数据为引用. 在JVM中,GC回收的大致准则,是认定如果不能从根节点,根据引用的不断传递,最终指向到一块内存区 ...

  5. c++中的引用与指针的区别

    http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...

  6. perl5 第十二章 Perl5中的引用/指针

    第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句 ...

  7. Java中弱引用、软引用、虚引用及强引用的区别

    Java中弱引用VS软引用 Java中有如下四种类型的引用: 强引用(Strong Reference) 弱引用(WeakReference) 软引用(SoftReference) 虚引用(Phant ...

  8. MVC ViewBag不能使用在工程文件中添加引用

    在工程文件中 <ItemGroup> // ... </ItemGroup> 添加引用 <Reference Include="Microsoft.CSharp ...

  9. Hibernate3中重复引用hbm文件错误信息记录

    Hibernate3中重复引用hbm文件错误信息记录. 八月 ::, ERROR - Context initialization failed org.springframework.beans.f ...

  10. [Perl系列—] 2. Perl 中的引用使用方法

    Perl 中的引用,为什么要使用引用? 对于熟悉C语言的开发人员来说, 指针这个概念一定不陌生. Perl 的引用就是指针,能够指向变量.数组.哈希表甚至子程序. Perl5中的两种Perl引用类型为 ...

随机推荐

  1. 2020版IDEA配置Tomcat 10出现卡主问题

    问题描述 配置了2020版的IDE和Tomcat,但是产生了,日志打印中途,卡住了的问题,如图: 18-Aug-2021 00:46:09.763 信息 [main] org.apache.catal ...

  2. 生物医学顶刊论文(JBHI-2024):TransFOL:药物相互作用中复杂关系推理的逻辑查询模型

    (2024.5.17)JBHI-TransFOL:药物相互作用中复杂关系推理的逻辑查询模型 论文题目:TransFOL: A Logical Query Model for Complex Relat ...

  3. vulnhub靶场 --> Red: 1

    靶机下载地址 Red: 1 << 点我 开始打靶 IP发现 nmap扫描网段发现靶机ip:192.168.111.142 端口发现 对靶机进行常规端口扫描 访问网站 到处点击发现存在一个可 ...

  4. 简单粗暴通过 Binlog 日志来恢复 MySQL 数据

    引言 Binlog 日志的主要作用: 1.增量备份. 2.主从复制. 操作步骤 1.登录 MySQL -> 执行 show variables like '%log_bin%'; 查询 binl ...

  5. 使用python在k8s中创建一个pod

    要在Kubernetes (k8s) 中使用Python创建一个Pod,你可以使用Kubernetes Python客户端库(通常称为kubernetes或kubernetes-client).以下是 ...

  6. redhat8 添加scsi类型的硬盘后开机重配虚拟机 且黑屏

    原因:因为vmware磁盘优先级里nvme类型的磁盘比scsi类型的磁盘优先级高,所以开机先启动scsi类型的磁盘 又因为scsi并不是系统盘所以不能够实现开机 解决方法: 改变vmware的磁盘优先 ...

  7. VmWare虚拟机和主机配置为同一网段IP

    参考博客:将虚拟机IP与主机IP设置在同一网段的方法 - 天懿 - 博客园 (cnblogs.com) 主机地址 主机通过WiFi连接,地址信息为: 虚拟机配置 选择编辑-->虚拟网络编辑器-- ...

  8. Python缺失值处理实现

      在数据处理相关工作中,读取的数据中常常会有缺失值的情况,为顺利进行后续的操作,需要首先对缺失值进行处理,处理的方式一般为删除或填充,Python中提供了专门的工具包,可以方便地进行实现.读取操作可 ...

  9. INFINI Labs 产品更新 | Gateway 支持基于 Kafka 的复制能力,发布 Helm Charts 部署方式

    INFINI Labs 产品又更新啦~.本次更新概要如下:Easysearch 新增了索引字段相关统计 API,优化了 source_reuse 提升压缩效率:Gateway 新增诸多新特性,如:支持 ...

  10. sse 与 编译器自动优化

    direct x 形式的矩阵和向量计算代码在编译的时候是自动汇编为 sse汇编的 何时使用手写sse 指令呢,当你的应用程序需要写一些物理运算时候 可以使用自己编写的sse计算函数来为 3维运算加速 ...