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

简介:

@[TOC]

前言:

  • 本文介绍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,指针自加即指针向后偏移一个类型的大
  • 有多级指针,但是没有多级引用
  • 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  • 引用比指针使用起来相对更安全
相关文章
|
11天前
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
27 2
|
2月前
|
存储 编译器 C语言
内存管理【C++】
内存管理【C++】
44 1
|
2月前
|
存储 编译器 C语言
【C++】C\C++内存管理
【C++】C\C++内存管理
【C++】C\C++内存管理
|
2月前
|
存储 安全
什么是内存管理单元(MMU)?
【8月更文挑战第23天】
61 0
|
6天前
|
安全 C++
超级好用的C++实用库之环形内存池
超级好用的C++实用库之环形内存池
23 5
|
6天前
|
C++
超级好用的C++实用库之动态内存池
超级好用的C++实用库之动态内存池
15 0
|
1月前
|
编译器 Linux C语言
C++基础入门
C++基础入门
|
2月前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
|
2月前
|
安全 编译器 程序员
【C++初阶】C++简单入门
【C++初阶】C++简单入门
|
1月前
|
C语言 C++
C++(二)内存管理
本文档详细介绍了C++中的内存管理机制,特别是`new`和`delete`关键字的使用方法。首先通过示例代码展示了如何使用`new`和`delete`进行单个变量和数组的内存分配与释放。接着讨论了内存申请失败时的处理方式,包括直接抛出异常、使用`try/catch`捕获异常、设置`set_new_handler`函数以及不抛出异常的处理方式。通过这些方法,可以有效避免内存泄漏和多重释放的问题。
下一篇
无影云桌面