【CPU底层那些事(左值VS右值)】

本文详细解析了C++中的左值和右值概念,通过实例展示了它们在内存和寄存器中的表现。左值用于写操作,如变量;右值则常用于读操作,如计算结果。在汇编层面,右值读取后存储于看不见的临时变量,而左值则用于存储更新后的值。文章强调了左值可以降级为右值,但右值不能升级为左值,且列举了相关操作的正确与错误用法。
摘要由CSDN通过智能技术生成

1.对左值和右值的理解

int i = i+1;
左值用于写操作,可以存储数据;
右值用于读操作,读到的数据放在一个看不见的临时变量

在这里插入图片描述

i = i+1;
mov eax,DWORD PTR [rip+0x2f1c] # 40402c

对于第一条汇编指令,执行的是右边,读取变量i的值,并存放在程序员看不见的“临时变量”,寄存器eax中。

add eax,0x1

对于第二条汇编指令,对临时变量进行加1的操作,将结果2,存放在“临时变量”,寄存器eax中

mov DWORD PTR [rip+0x2f13],eax # 40402c

对于第三条汇编指令,把寄存器eax中的值,存放在左值变量i里面。
在这里插入图片描述
总结:
1.左值表达式,支持写操作,左值表达式是以变量或引用的形式出现。
2.右值表达式,多用于读操作和计算。但存储读取和计算结果的地方,往往在寄存器中,代码中不可见。
3.左值可以读/写;右值只能读。因此左值可以降级为右值使用,但右值不能升级为左值。
4.cpu眼中没有左右值的概念。
5.变量的后加操作i++,是属于右值,相当于对其进行后加操作后,变成了一个临时变量或常量。以下表达式都是错的。

++i++;
++(i++);
++(1)

6.变量的前加操作++i,是属于左值,对其进行前加操作后,依然可读、可写、可见。以下表达式都是正确的。

++i =1(++i)++++(++i)++++++++i;

往期链接:
1.CPU底层那些事(CPU如何读写变量).
2.CPU底层那些事(main函数).

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值