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

【C++】引用(reference)

引用是对一个变量或者对象取的别名

定义:真名的数据类型& 别名 = 真名;

既然是对一个变量或者对象取别名,那就得先有变量或对象,不能凭空取一个别名。也就是定义引用必须初始化。

  • 对引用的操作和对引用对应的变量的操作是完全等价的
  • 引用的类型必须和其所对应的变量的类型相同
  • 引用不是定义新的变量或对象,因此不会为引用开辟新的空间内存

示例:

#include<iostream>
using namespace std;
int main() {
	int a = 8;
	int& ref_a = a;
	ref_a++;
	cout << a << endl;//9
}

其实引用就是指针的语法糖(syntax sugar)

我们为什么要使用引用呢?我们干嘛要起个别名而不直接用真名呢?

假设我们想通过调用一个函数来实现一个整型变量的自增,有下面3种传递方式

值传递:形参的改变无法改变实参的值

void fun(int x) {
	x++;
}
int main() {
	int a = 8;
	fun(a);
	cout << a << endl;//8
}

地址传递:形参的改变可以改变实参的值

void fun(int* x) {
	(*x)++;//不加括号就会先自增再解引用
}
int main() {
	int a = 8;
	fun(&a);
	cout << a << endl;//9
}

引用传递:形参的改变可以改变实参的值

void fun(int& x) {
	x++;
}
int main() {
	int a = 8;
	fun(a);
	cout << a << endl;//9
}

是不是比使用指针更简洁些呢

那么,可不可以给引用取别名呢?答案是可以的

int a = 8;
int& a1 = a;
int& a2 = a1;//给引用取别名(引用的嵌套)
int& a3 = a;//同一个对象或变量可以取多个别名

引用和指针的区别

  1. 指针是另一个变量,而引用是自己本身,指针会占用额外存储空间,但引用不会占用额外存储空间,也就是说别名和真名是同一个东西,共享同一块内存
  2. 指针可以不用初始化赋值,但是引用必须初始化赋值
  3. 指针可以有多级指针,但是引用没有多级引用
  4. 指针可以改变指向,但是引用不能改变其所指代的变量或对象
  5. 指针是间接访问,引用是直接访问

关于指针的更多内容:【C语言】指针


http://www.kler.cn/a/399211.html

相关文章:

  • 【Pytorch】IPython库中的display函数
  • C语言项⽬实践-贪吃蛇
  • pytest | 框架的简单使用
  • 【Android原生问题分析】夸克、抖音划动无响应问题【Android14】
  • LLaMA-Factory全流程训练模型
  • IDEA2024:右下角显示内存
  • Linux core转储文件排查及命令整理
  • MySQL数据库备份与恢复完全指南
  • 使用 Go 实现将任何网页转化为 PDF
  • MATLAB向量元素的引用
  • 「Mac玩转仓颉内测版14」PTA刷题篇5 - L1-005 考试座位号
  • alibabacloud学习笔记15
  • 【系统架构设计师】真题论文: 论大规模分布式系统缓存设计策略(包括解题思路和素材)
  • 【VIM】vim 常用命令
  • [C/C++] move示例
  • 198. 打家劫舍【C++】【动态规划】
  • Nature Electronics|综述| 柔性脑机接口 (健康监测/柔性电极/可植入式电子/可穿戴电子/脑机接口/柔性电子/人机交互)
  • 【Mysql】Mysql函数(上)
  • 实用教程:如何无损修改MP4视频时长
  • leetcode-44-通配符匹配
  • Jenkins + gitee 自动触发项目拉取部署(Webhook配置)
  • 【JSOO】设计模式
  • 2024-11-15 Element-ui的tab切换中table自适应宽度无法立即100%的问题
  • Linux高阶——1116—SOCKET套接字基础
  • 数据结构大致分类
  • 函数式组件和类组件的区别