该贴子第一条回答虽然浅尝辄止,但还是很有参考价值。

https://www.quora.com/What-is-lvalue-and-rvalue-in-C

IBM一个简单的说法是:

“…通俗的左值的定义就是非临时对象,那些可以在多条语句中使用的对象。所有的变量都满足这个定义,在多条代码中都可以使用,都是左值。右值是指临时的对象,它们只在当前的语句中有效。”

https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/index.html

可以这样理解,“非临时”意味着该值应该存储在系统的寄存器中,而“临时”意味着该值可以存储在内存或临时寄存器中。因为rvalue临时存在于内存中,对rvalue的取地址操作是没有稳定的结果的。

回到quora的回答。

变量是表象,真正有意义的是变量对应的地址。

对于某个变量对应的地址,如果往该地址存一个数值,这是lvalue,因为该值最终需要送到寄存器用于做后续运算;如果从该地址取一个值,这是rvalue,因为取出来的值会被临时存在内存或临时寄存器中。

The difference is when a variable is used as an lvalue, the compiler sets up the computer to store a value to the address in the pointer. When it's used as an rvalue, it tells the computer to load a value from the address in the pointer into a register in preparation for some other operation, like calling a function, or for an indexing operation (for use in an array), or an arithmetic computation.

注意该段文字专门强调了store和load这两个命令。

最新文章

  1. UILabel 自适应宽高
  2. php 屏蔽NOTICE报错机制代码
  3. OpenStack Mitaka安装
  4. clientTop、offsetTop和scrollTop的区分
  5. BZOJ 1500 Splay 全操作
  6. php基础05:常量
  7. 使用jQuery基本过滤选择器
  8. JavaScript:表单验证模型
  9. SQLServer分页存储过程
  10. Linux 配置 vimrc
  11. 01.C语言关于结构体的学习笔记
  12. 根据中国气象局提供的API接口实现天气查询
  13. 尝试使用Java6API读取java代码
  14. 怎样在Win7 64位旗舰版安装Python+Eclipse开发环境
  15. 201521123072《java程序设计》第十二周学习总结
  16. 第201621123043 《Java程序设计》第13周学习总结
  17. 实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积
  18. shp2pgsql向postgresql导入shape数据
  19. zabbix学习-zabbix安装
  20. UNIX高级环境编程(15)进程和内存分配 < 故宫角楼 >

热门文章

  1. vue-axios请求
  2. 算法 按照ASII码从小到大输出字符(数量最多)
  3. Centos MySQL 5.7安装、升级教程
  4. SQL Join连接
  5. Qt开发MySQL程序发布后出现"Driver not loaded"的问题
  6. STM32的结构和启动模式
  7. 切换路由时取消全部或者部分axios请求,并将一些从不需要取消的加入白名单
  8. 关于respond.js
  9. <自动化测试>之<unittest框架使用1>
  10. JMeter ServerAgent服务器资源监控插件