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. Spring IoC注解式开发无敌详细(细节丰富)

    1. Spring IoC注解式开发无敌详细(细节丰富) @ 目录 1. Spring IoC注解式开发无敌详细(细节丰富) 每博一文案 2. 注解回顾 3. Spring 声明Bean的注解 3.1 ...

  2. 基于 ESP8266_RTOS_SDK 实现声控灯

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdint.h&g ...

  3. 关于对于Java中Entity以及VO,以及DTO中Request对象序列化的学习

    关于 Serializable的探讨 前提引入 是由于软件测试上有同学提到说,什么该字段在程序刚运行时,导致jvm激增,所以吸引了我的注意 回顾代码 MybatisPlus Generator自动生成 ...

  4. 做程序员这么久,你知道UTF-8和Unicode的关系吗?

    UTF-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念. 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由: 众所周 ...

  5. Nginx 修饰符 Location 详解

    概述 location 指令可以用在虚拟服务器 server 部分,并且意味着提供来自客户端的 URI 或者内部重定向访问. location 的定义如下: location [modifier] u ...

  6. kubernetes configmap配置方法

    configmap解释 在k8s运行期间会有一些依赖的配置文件,他们存在宿主机中的一个目录中或者代码里,如果配置放生变化,pod在另一台服务器启动,在没有这些配置的时候,可能会导致pod无法正常运行, ...

  7. 微信小程序跳转重新加载目标页

    可用于在首次进入到小程序后就执行性了首页的onLoad方法,等你再去点击其它页面再回来的时候就不会加载onLoad了,比如你跳到登录页后再返回到首页会发现首页啥数据都没加载,所以你在登录那边进行跳转的 ...

  8. (八十七)c#Winform自定义控件-朝上的瓶子

    官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kw ...

  9. php简单登录

    <?php // 1,php接收参数 $userName = $_POST['userName']; $userPwd = $_POST['userPwd']; // 2,PHP需要操作数据库 ...

  10. Adobe软件资源 PS PR AE等等

    整理了一波Adobe软件,19年20年21年Mac版本的都有,关注Rand_cs即可领取