C++入门》》内存单元的别名---引用

本文详细介绍了C++中的引用,包括其作为变量别名的特性、初始化规则、常引用和权限、在函数参数及返回值中的应用。引用不占内存,提供了一种高效且安全的传递数据的方式,与指针相比,引用更安全且不可改变引用目标。同时,文章提到了引用与指针的主要区别,并强调了引用在程序设计中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

  • 本文介绍C++的特殊语法–》》变量的别名–引用。

  • 博主收集的资料New Young,连载中。

  • 博主收录的问题:New Young

  • 转载请标明出处:New Young

补充

临时变量

其实很多的运算比如:表达式,返回值,隐式类型转换等都会生成具有常属性的临时变量tmp

image-20220309120235937

虽然有的简单的函数的函数栈帧在销毁会将值存在到寄存器eax中,但是寄存器非常小(4字节,8字节等),当存放的类型占用内存很大时,就不会存放到寄存器中,而是在当前调用函数那层栈帧中开辟一个临时的变量,用于存放返回值。

image-20220308213913200

引用的概念

  • 无论是程序还是计算机,最终操作的都是内存单元,而存储数据元素的变量实际上是内存单元别名。而对于同一个内存单元,我们可以给它取很多别名,而这些别名就是那个内存单元。可以看出引用是不需要开辟空间的,没有必要。
  • 同样如果对一个变量名取别名—引用,那些别名就是变量,也就是内存单元的别名,那么对这些别名进行的运算结果是直接影响内存单元,也同样影响其它别名
  • image-20220308204609297

引用的形式

起别名对象的类型+关键字&+别名=引用对象

image-20220308210153743

引用的注意点

  • 引用是不会开辟空间的,不占内存
  • 引用在定义时必须初始化
  • 同一变量的引用,只要其中一个对内存单元操作了,其影响就会映射到原变量—所有别名就是变量本身,在别名上的操作就是对变量的操作。
  • 一个变量可以有多个引用
  • 引用一旦引用的实体,就不能成为其它实体的引用。

常引用

权限

  • 权限指的是对内存单元读或写操作。

  • 权限放大:小权限的操作是进行大权限的操作,称为权限放大,这是不允许的。

  • 权限缩小:大权限的操作进行小权限的操作是允许的

image-20220308221457908

引用的使用场景

做函数的形参

void swap(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = a;
}


做函数返回值

  • 可以做函数返回值,但是要小心使用

比如

image-20220308224956607

  • 如果函数返回时,出了函数作用域,如果返回对象还未还给系统(静态变量,全局变量等),则可以使用引用返回,如果已经还给系统了,则必须使用传值返回 .。

引用的优点

  • 引用是不开辟空间的,这就在某些地方,可以提高程序运行效率。

  • 而传值,会在函数栈帧期间为形参开辟空间,是有时间消耗的

image-20220308230216877

引用与指针的区别

  • 指针是一个变量,只是它的内存单元存放的是地址,通过这个地址我们可以操作它对应的内存单元,本质上和引用是不一样的。虽然有时候,

  • 引用《高质量C++程序设计》:用适当的工具做恰如其分的工作。引用体现的是最小特权原则,即给予程序元素以完成功能的最小权限。而指针能够毫无约束的操作内存是非常危险的。

以下的总结理解就行,不需要特别记忆。

  • 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型
    实体
  • 没有NULL引用,但有NULL指针
  • sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节)
  • 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大
  • 有多级指针,但是没有多级引用
  • 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  • 引用比指针使用起来相对更安全
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值