对于左值和右值还有一些模糊的地方:
书上说左值(L-value)是指地址值,右值(R-value)是指数据值。
但对于***右值指的是引用了一个存储在某个内存地址里的数据***这句话不是特别清楚,比如说:a = 5,
1、数值5是来自于内存中的某个特定存储区域吗,而且无论数值大小均是这么来的吗(记忆中好像不是 的呢)?
2、使用数值5的时候是以copy的方式还是其他的方式得到的?
3、或者是在赋值之前临时创建的大小为int的空间来存储5,并非是从内存中的引用?
4、关于这方面有什么相关的书籍推荐么?
先谢谢各位不吝赐教。
不晓得你看的什么书,我不大明白这个地址值和数据值的定义
一个左值可能是一个函数或者对象。
一个右值可能是一个对象、临时对象或者临时对象的子对象、或者不是对象的值
具体可以参阅标准3.10小节,讲的就是左值与右值
至于5所在的内存位置,对于这种整数来说,对于编译器来讲一般都是使用立即数直接赋值,5并没有临时存在于什么地方,
就像是把5放在a所在的栈上的位置,那么这句话就是 a = 5;
如果是字符串,有可能存储在其他位置比如代码段,然后拷贝过来,这样就是 str = "123143";
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。