| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4875 人关注过本帖
标题:左右值@二篇
只看楼主 加入收藏
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
结帖率:100%
收藏
 问题点数:0 回复次数:20 
左右值@二篇
什么是左值
关于左值右值用几句话其实也能表达, 左值是具有地址(在内存中)的值。由于所有变量都有地址,因此所有变量都是左值。之所以使用左值,是因为左值是赋值语句左侧唯一的值。当我们进行赋值时,赋值运算符的左侧必须为左值。
什么是右值
 右值是指可以分配给左值的任何值。总是评估右值以产生单个值。 右值的示例是文字(例如5,其结果为5),变量(例如x,其结果为最后分配给它的值)或表达式(例如2 + x,其结果为该值) x+2)。
程序代码:
int y;      // define y as an integer variable
y = 4;      // 4 evaluates to 4, which is then assigned to y
y = 2 + 5;  // 2 + 5 evaluates to 7, which is then assigned to y
 
int x;      // define x as an integer variable
x = y;      // y evaluates to 7 (from before), which is then assigned to x.
x = x;      // x evaluates to 7, which is then assigned to x (useless!)
x = x + 1;  // x + 1 evaluates to 8, which is then assigned to x.

不过可以通过& 和const进行左右值的转化

关于表达式与表达语句
什么是表达式
表达式 是文字,变量,运算符,和显示函数调用的组合,他们产生单个输出值
执行表达式时,将对表达式中的每个术语进行求值,直到剩下单个值为止(此过程称为求值)。 该单个值是表达式的结果。
 根据c++标准 表达式是运算符及其操作数的序列,用于指定计算。
表达评估可能会产生结果(例如,2 + 2的评估会产生结果4),并且可能会产生副作用(例如std :: printf(“%d”,4 )的评估会在标准字符上打印字符'4'输出)。

例如
 4, 'a', "Hello".是表达式的值
2 + 3,  x + 4是表达式

所以我认为左值不是表达式,右值大部分是表达式(当然有错误可以指出来)
 表达式语句是由一个表达式和一个分号组成的语句。 执行该语句时,将对表达式进行求值(并且将舍弃表达式的结果)。
int x=5+4;这一句是表达式语句

如果对舍弃表达式的结果不明白
就拿上面表达式语句举例吧
5+4=9会把最后的值9赋值给x,然后丢掉表达式的结果
在c++表达式语句有可能很有用,有可能很没用,在c中应该是同样的吧
比如
3+2;是个很没用的表达式,因为在执行他的时候将会丢掉5
int x=5+4;是个很有用的表达式,当9丢掉的时候但是已经分配给x使用了
在c++中
如何看待cout<<1+2;呢?
直接复制。。。
堆积在CPU上或压入堆栈(RAM)。
如果将值压入堆栈,则@std :: cout.operator <<完成后将弹出该值。 请注意,堆栈没有与RAM中的其他值混合。 它有自己的保留空间。
 2)
 1和2不在内存中。 该表达式是在编译时求值的,因此3与构成您代码的字节一起存储。 它不与其他值混合,因为代码在RAM中获得了自己的空间。 根据调用约定,将3压入堆栈或保留在CPU上。

搜索更多相关主题的帖子: 语句 表达式 then 结果 单个 
2020-03-28 10:18
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
左值右值是表达式的一个属性
左值全名叫做左值表达式
是左值但不是表达式这是错的
假设 int n=10; 那么 n是一个表达式 按照你写的表达式的概念
文字,变量,运算符,和显示函数调用的组合 产生值10
符合这个概念 为什么说n不是表达式呢
认可n是表达式 n本身是左值也应该没什么疑问 毫无疑问具有地址

https://zh.
2020-03-28 10:27
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
const 左右值转换这个说法不成立
按照你对左值的描述 左值具有地址
那么
int  n;
const int  m=10;
m和n都是左值 和有没有const没关系

https://zh.
2020-03-28 10:30
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
回复 2楼 lin5161678
感谢大佬提供宝贵意见,这个贴有你的补充更加美好

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-28 10:33
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
int x=5+4;这一句是表达式语句
这是错的
x=5+4;才是表达式语句
你写的是定义
完全不同的概念

https://zh.
2020-03-28 10:34
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
所有变量都有地址这个说法不准确 没有考虑寄存器变量
的确寄存器变量 从实现的角度未必会占用寄存器 有可能分配地址
但是从标准的角度寄存器变量就是没有地址的
比如 寄存器变量不能 做一元&操作

https://zh.
2020-03-28 10:38
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
大佬你可以一起指出来吗,我非常不喜欢在第二页去看重要内容

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-28 10:39
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
顺便讲点没什么用的冷知识
对于 表达式语句 表达式是可选的
也就是说 ; 也是一个表达式语句

https://zh.
2020-03-28 10:40
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用叶纤在2020-3-28 10:39:13的发言:

大佬你可以一起指出来吗,我非常不喜欢在第二页去看重要内容

你可以在本地建立一个文档把内容都整理在一起
我喜欢这样回复

https://zh.
2020-03-28 10:43
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
以下是引用lin5161678在2020-3-28 10:43:53的发言:


你可以在本地建立一个文档把内容都整理在一起
我喜欢这样回复

可是这是我的笔记文章,未来需要补充的,请大佬考虑下楼主的感受,还有这是网络时代,本地一旦清空就没了,网络上能保存个十几年

[此贴子已经被作者于2020-3-28 10:47编辑过]


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-28 10:45
快速回复:左右值@二篇
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039358 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved