C++引用(&)笔记

这篇具有很好参考价值的文章主要介绍了C++引用(&)笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++引用(&)笔记

C++引用(&)笔记

1.寄存器一般只有4/8个字节,所以返回时候的中间变量(下图的临时变量)不一定是储存在寄存器当中

C++引用(&)笔记

2.传引用返回可以减少拷贝,增加效率

C++引用(&)笔记

但运行打印会出错的,因为当栈帧销毁的时候,清理栈帧就会得到随机值

正确表达:

C++引用(&)笔记

3.临时变量具有常性

C++引用(&)笔记

这样的代码是无法通过编译的,因为这里涉及到了一个权限的放大,因为对于引用来说,权限不能被放大,只能权限缩小/平移

这里的临时变量a具有常性,所以它的类型其实是const double,从const double转换到了int这里是一个权限的缩小,所以会报错,如果改成const int &c=a;就可以通过编译了。

C++引用(&)笔记

为什么要有临时变量?

C++引用(&)笔记

这里的ij进行比较的时候,由于类型不同,需要对类型进行提升,一般是由小变大,比如这里的int就要提升到double才能进行比较,而这里的提升是对原变量i进行提升吗?如果因为一个比较而修改原来的变量类型那不是乱套了吗?所以这里会生成一个临时变量,然后对临时变量的类型进行提升,提升之后再与j进行比较。

4.引用是否开了空间?

从语法的层面上来说它是没有开空间的,它就是变量的别名,那么从汇编的角度来看呢?

C++引用(&)笔记

先看指针pa的汇编代码:首先是将a的地址存在寄存器eax当中,然后再将eax(存的a的地址)给pa,然后把pa的地址给寄存器eax[eax]就是对eax进行解引用,把1Eh(30)eax

然后再看引用的汇编代码,可以看到和指针是几乎一摸一样的操作,所以从底层来说引用是开了额外了空间的,引用是类似指针的方式实现的

引用和指针的不同点:

  1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
  2. 引用在定义时必须初始化,指针没有要求
  3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体
  4. 没有NULL引用,但有NULL指针
  5. sizeof中含义不同引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32

位平台下占4个字节)文章来源地址https://www.toymoban.com/news/detail-442786.html

  1. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
  2. 有多级指针,但没有多级引用
  3. 访问实体的方式不同,指针需要显式解引用,引用编译器会自己处理
  4. 引用比指针更加安全

到了这里,关于C++引用(&)笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog学习笔记——时序逻辑(shift register移位寄存器)

    1. 4位移位寄存器  4-bit shift register 2. Left/ right register 左移|右移寄存器(1位)   3. Left/right arithmetic shift by 1 or 8 算数 左移|右移寄存器(1 或8位) 4. 5-bit LFSR 5. 3-bit LFSR   6. 32-bit LFSR   7. Shift register 8. Shift register    9. 3-input LUT  

    2024年02月03日
    浏览(34)
  • 数字IC前端学习笔记:LSFR(线性反馈移位寄存器)

    相关文章 数字IC前端专栏 https://blog.csdn.net/weixin_45791458/category_12173698.html?spm=1001.2014.3001.5482 引言 LFSR(线性反馈移位寄存器)用于产生可重复的伪随机序列PRBS(Pseudo-Random Binary Sequence),结构包括n级D触发器和一些异或门(或同或门)组成,在每个时钟沿,后级D触发器输出会以

    2024年02月02日
    浏览(31)
  • STM32 寄存器配置笔记——USART配置中断接收乒乓缓存处理

           本文主要介绍如何配置USART接收中断,使用乒乓缓存的设计接收数据并将其回显在PC 串口工具上。以stm32f10为例,配置USART1 9600波特率。具体配置参考上一章节STM32 寄存器配置笔记——USART配置 打印。         乒乓缓存的设计应用场景:当后面的处理单元在工作期间,

    2024年02月20日
    浏览(42)
  • 《C和指针》笔记12: 存储类型(自动变量、静态变量和寄存器变量)

    在 代码块内部声明的变量 的缺省存储类型是自动的(automatic),也就是说它存储于堆栈中,称为自动(auto)变量 。auto就是用于修饰这种存储类型的,但它极少使用,因为代码块中的变量在缺省情况下就是自动变量。 在程序执行到声明自动变量的代码块时,自动变量才被创

    2024年02月10日
    浏览(33)
  • 嵌入式学习笔记——STM32的USART相关寄存器介绍及其配置

    上一篇中,对串口做了个概述,主要是介绍了串口通信的特征,异步串行全双工通信,然后就是结合串口的框图梳理了一下STM32中USART的配置流程以及发送接收数据的流程,本文将接着上篇的内容,对串口的寄存器做个介绍,然后实现一个简单的收发实验。 根据之前GPIO的经验

    2024年02月05日
    浏览(39)
  • 野火霸天虎 STM32F407 学习笔记_2 寄存器介绍

    虽然正式编程没有必要用寄存器编程,通常都是库函数或者 hal 库。但是还是有必要学一下原理的。 寄存器映射 芯片视图如下。 丝印:芯片上印的信息。型号,内核,生产批次等。 引脚:左上角是有小圆点的,从左上-左下-右下-右上逆时针看。或者如果没有小圆点,把丝印

    2024年02月06日
    浏览(35)
  • 【汇编中的寄存器分类与不同寄存器的用途】

    寄存器分类 在计算机体系结构中,8086CPU,寄存器可以分为以下几类: 1. 通用寄存器: 通用寄存器是用于存储数据和执行算术运算的寄存器。在 x86 架构中,这些通用寄存器通常包括 AX、BX、CX、DX、SI、DI、BP 和 SP。其中,AX、BX、CX 和 DX 寄存器可以分别作为累加器(accumulat

    2024年02月09日
    浏览(41)
  • stm32的BRR寄存器和BSRR寄存器

    1、BRR---   bit   RESET(置0)  register   //高16位无,低16位置1为0,不能写1 2 、BSRR---   bit   SET(设置1或0)       register   //低16位设置1为0 BSRR:用于低16位的作用是让指定的IO口置1;而高16位的作用是让指定的IO口置0。  

    2024年02月11日
    浏览(35)
  • 寄存器内存读写指令(二) —— 多寄存器读写 LDM / STM

    有的时候,CPU可能会遇到 a++; b++; c++,这个时候为了提升效率,CPU可能会一次将多个寄存器里的变量保存到内存中。这个时候之前介绍的 LDR / STR 指令虽然也能实现,但只能操作一个寄存器的读写。 因此,考虑到这点,下面介绍多个寄存器的读写指令 将 多个寄存器 的数据写

    2024年02月07日
    浏览(48)
  • FPGA之 寄存器、触发器、锁存器

    每个slice有8个存储元素,每个存储元素如下图所示:  其中四个为DFF/LATCH,可以配置为边沿触发D型触发器或电平敏感锁存器输入上图。D输入可以通过AFFMUX, BFFMUX, CFFMUX或DFFMUX的LUT输出直接驱动,也可以通过AX, BX, CX或DX输入绕过函数发生器的 BYPASS slice输入直接驱动。当配置为锁存

    2024年01月18日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包