左值和右值--群聊天引起的话题

 

 品(466291086) 11:08:35 
 a=4;(a++) += a    ;  求a
(本消息由该成员通过手机QQ发送,体验手机QQ请登录: http://mobile.qq.com/c )  
ITGrit[C/C++ MFC](286715286) 11:09:13 
9
【提示:此用户正在使用WebQQ:http://web.qq.com/】 
秦伟(871452271) 11:09:14 
9?
ITGrit[C/C++ MFC](286715286) 11:09:22 
呵呵 
品(466291086) 11:09:28 
额饿  
品(466291086) 11:09:35 
高手  
cuiwow(157808076) 11:09:40 
这个不是要看具体编译器么..?
品(466291086) 11:09:44 
再来个  
ITGrit[C/C++ MFC](286715286) 11:09:47 
? 
品(466291086) 11:09:52 
  
lander(530468003) 11:09:51 
搞这么复杂
ITGrit[C/C++ MFC](286715286) 11:10:04 
群里是不是好几天没人说话了 
ITGrit[C/C++ MFC](286715286) 11:10:05 
哈哈 
踏雪无痕(348259989) 11:10:23 
我也觉的得看编译器
ITGrit[C/C++ MFC](286715286) 11:10:27 
放5.1群里也都放假了 
ITGrit[C/C++ MFC](286715286) 11:10:32 
为什么 
品(466291086) 11:10:37 
 (++a) += (a++);
a = ?  
品(466291086) 11:10:49 
  
ITGrit[C/C++ MFC](286715286) 11:11:03 
阴险,哈哈 
品(466291086) 11:11:06 
哈哈哈  
品(466291086) 11:11:21 
 (++a) += (a++);
a = ?  
醉里笑紅尘□(464469131) 11:11:59 
刚才你的那个题结果怎么是9啊 ??
ITGrit[C/C++ MFC](286715286) 11:12:00 
10 
醉里笑紅尘□(464469131) 11:12:09 
怎么算的??
ITGrit[C/C++ MFC](286715286) 11:12:09 
? 
醉里笑紅尘□(464469131) 11:12:13 
可否赐教??
品(466291086) 11:12:30 
4+4+1  
醉里笑紅尘□(464469131) 11:12:46 
能具体点吗??
品(466291086) 11:13:07 
这个答案 (++a) += (a++);
a = ?多少啊  
ITGrit[C/C++ MFC](286715286) 11:13:09 
从右向左求值 
ITGrit[C/C++ MFC](286715286) 11:13:26 
10? 
品(466291086) 11:13:29 
我用的手机  哥哥  
品(466291086) 11:13:33 
哈哈哈  
品(466291086) 11:13:36 
  
醉里笑紅尘□(464469131) 11:13:55 
但是我实在不懂啊!
品(466291086) 11:13:57 
先看看对不   这个题  
品(466291086) 11:14:06 
  
lander(530468003) 11:14:22 
好无聊啊
品(466291086) 11:14:33 
等我下课   单m  
品(466291086) 11:14:51 
呃呃   
品(466291086) 11:15:37 
下了   看老师无聊   
ITGrit[C/C++ MFC](286715286) 11:16:02 
上当了 
品(466291086) 11:16:19 
呵呵  
cuiwow(157808076) 11:16:55 
表达式可以当左值么?
ITGrit[C/C++ MFC](286715286) 11:17:15 
a++ 返回是有值 
ITGrit[C/C++ MFC](286715286) 11:17:21 
悲剧 
cuiwow(157808076) 11:17:38 
呃 是么
品(466291086) 11:17:42 
  
品(466291086) 11:18:01 
还是这牛  
品(466291086) 11:18:14 
怎么可以呢  
ITGrit[C/C++ MFC](286715286) 11:21:25 
++a返回的也不是左值? 
ITGrit[C/C++ MFC](286715286) 11:21:42 
??? 
cuiwow(157808076) 11:21:55 
表达式不都是右值么
ITGrit[C/C++ MFC](286715286) 11:22:18 
哦?那我搞错了 
醉里笑紅尘□(464469131) 11:23:21 
右值左传!
那么什么是左值和右值呢

   通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。

举个很简单的例子:

a=b+100;

那么这里a就是左值,b+25就是一个右值。左值和右值之间是不一定都能互换的,上面的这个例子就是不能互换的,如果写成

b+100=a;

大家都能看出来这样写会不编译通过的,因为编译器无法判断b+100的内存地址,所以不能操作。

看了这个例子,可以做一个总结,左值必须应该是一个变量或者是表达式等,但是它的物理位置是可以确定的,而右值不一定,这也是它们两者之间的区别。

关于左值是表达式的例子有数组,还有指针这些都可以。

int array[10];

int a=5;

array[a+3]=10; //这里左值就是一个数组表达式了

 

 

另外:liotta朋友给了一些其他方面的提示 (左值右值翻译可能有些问题)

错了,没有什么左值和右值!
翻译害人不浅,

L-value中的L指的是Location,表示可寻址。The "l" in lvalue can be though of as location
R-value中的R指的是Read,表示可读。The "r" in rvalue can be thought of as "read" value.   

 

 

为什么a+++++b会编译错误呢? 第一,编译器在读入此语言时,遇到连续多个+,如+++++,自动识别位((++)++)+,即会++比+更优先识别(大概只能这样说)。 第二,++运算需要左值的。 a+++++b <=> ((a++)++)+b a++没问题,但问题就在于a++却不能作为左值,即不能被赋予值,因为a++是先返回a的值进行运算,然后再对a的引用加1。然而a的值(value-a)是不能作为左值的。所示((a++)++)错误。 ++a为什么可以作为左值呢? 原因在于++a是对a的引用加1,然后返回a的引用。a的引用当然可以作为左值,被赋值了。

你可能感兴趣的:(qq,mfc,语言,手机,聊天,编译器)