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

前言:

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

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

  • 博主收录的问题:New Young

  • 转载请标明出处:New Young

补充

临时变量

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

image-20220309120235937

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

image-20220308213913200

引用的概念

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

引用的形式

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

扫描二维码关注公众号,回复: 14196212 查看本文章

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,指针自加即指针向后偏移一个类型的大
  • 有多级指针,但是没有多级引用
  • 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  • 引用比指针使用起来相对更安全

猜你喜欢

转载自blog.csdn.net/qq_55439426/article/details/123365878