开发者社区> 问答> 正文

赋值语句中关于左值和右值的疑惑

对于左值和右值还有一些模糊的地方:

书上说左值(L-value)是指地址值,右值(R-value)是指数据值。
但对于***右值指的是引用了一个存储在某个内存地址里的数据***这句话不是特别清楚,比如说:a = 5, 
                1、数值5是来自于内存中的某个特定存储区域吗,而且无论数值大小均是这么来的吗(记忆中好像不是          的呢)?
                2、使用数值5的时候是以copy的方式还是其他的方式得到的?
                3、或者是在赋值之前临时创建的大小为int的空间来存储5,并非是从内存中的引用?
                4、关于这方面有什么相关的书籍推荐么?
                

先谢谢各位不吝赐教。

展开
收起
杨冬芳 2016-05-30 18:31:24 2144 0
1 条回答
写回答
取消 提交回答
  • IT从业

    不晓得你看的什么书,我不大明白这个地址值和数据值的定义

    一个左值可能是一个函数或者对象。
    一个右值可能是一个对象、临时对象或者临时对象的子对象、或者不是对象的值
    具体可以参阅标准3.10小节,讲的就是左值与右值

    至于5所在的内存位置,对于这种整数来说,对于编译器来讲一般都是使用立即数直接赋值,5并没有临时存在于什么地方,
    就像是把5放在a所在的栈上的位置,那么这句话就是 a = 5;
    如果是字符串,有可能存储在其他位置比如代码段,然后拷贝过来,这样就是 str = "123143";

    2019-07-17 19:20:56
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载