什么是右值引用/左值引用:绝清晰--从汇编探索

希望我们不仅把编程当成一份工作,更要将其当成一份热爱!!!

                                                                           -----潜意识中有个想成为一名厉害的程序员的梦

一、前言

学习右值引用的时候,看了很多文章,但一直感觉学的有点模糊,好像懂了,又好像没懂。特意去用汇编从底层研究了一下右值引用。临近秋招其实自己准备的还差很多,但还是在求知欲以及自己的倔强劲驱使下花了半个上午,一下午研究了一下,咱就是说:挺心疼时间的,呜呼!!!

提别提示:本文内容,为本人通过汇编实践而得,不代表官方,不代表正确。

二、什么是引用、左值引用、右值引用?-表层含义

借用一下菜鸟教程引用的解释:

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

                                                                                   --C++ 引用 | 菜鸟教程 (runoob.com)

但是我觉得这个应该是左值引用的定义,而非引用的定义。我来给引用重新下一个定义:

什么是引用?

引用是给一块内存空间起一个名字。这块内存空间本来就有一个名字,或者没有名字。

什么是左值引用?

给一个本来就有名字的内存空间另外起一个名字。

什么是右值引用?

给一个本来没有名字的内存空间起一个名字。

三、什么是引用、左值引用、右值引用?-底层剖析

从底层角度定义引用、左值引用、右值引用。以下为自己定义,非官方:

什么是引用?--底层含义

引用是定义一个指针,该指针指向一块内存空间。这块内存空间本来就有一个名字,或者没有名字。

什么是左值引用?--底层含义

左值引用是定义一个指针,该指针指向一块本来就有一个名字的内存空间。

什么是右值引用?--底层含义

右值引用是定义一个指针,该指针指向一块没有名字的内存空间。

 左值引用底层剖析

观察以下代码,左侧是源码,右侧是其汇编代码(懒得看汇编的话,直接看我下文描述就行):

上述汇编的代码逻辑是:开辟12字节内存空间,其中四个字节为变量a的内存空间,并赋值为1。另外8个字节(64位系统)为引用b(准确说应该叫指针b)的内存空间,其内容为a的内存空间的地址。假设此时栈帧地址为100,如图所示:  

根据上述底层剖析,所以我说:

什么是左值引用?--底层含义

左值引用是定义一个指针,该指针指向一块本来就有一个名字的内存空间。

未完待续...

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值