请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,左右值还是不太理解

int a =2;
int* pa=&a;
++pa=&a;
pa++=&a //error 报错

在msvc编译环境下

++pa能作为左值但是pa++不可以;这点要怎么理解呢?(和课上讲的不一样)
结合顺序是不这样?
++pa=&a;-》(++pa)=&a;
pa++=&a-》(pa)++=&a

正在回答 回答被采纳积分+3

1回答

quickzhao 2022-09-27 22:32:23

左值对应有明确地址的一块空间,而右值不是,比如临时对象。你看看这里++在前缀和后缀的实现,前缀实现其实返回的就是对象本身,所以有明确的地址,可以作为左值;而后缀的实现则只是返回一个临时对象,不能做左值。

0 回复 有任何疑惑可以回复我~
  • 提问者 我想跑路 #1
    是不是这样理解  
     ++i=1-> (i=i+1)=1 
    i++=1->i+1=1
     i+1是个临时对象,是个常量不能作为左值?
    回复 有任何疑惑可以回复我~ 2022-09-27 23:00:08
  • quickzhao 回复 提问者 我想跑路 #2
    可以这么理解。
    回复 有任何疑惑可以回复我~ 2022-09-27 23:54:23
  • 提问者 我想跑路 回复 quickzhao #3
    好的,谢谢老师
    回复 有任何疑惑可以回复我~ 2022-09-28 08:49:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信