标题:[讨论][求助]关于后置自增操作符的问题
取消只看楼主
panxiang88
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-7-21
 问题点数:0 回复次数:2 
[讨论][求助]关于后置自增操作符的问题
int i = 5;
i = 6*(i++);

我理解是这样的:i自增后为6,i++返回5,并且6*5被赋给i,覆盖原值,那么i应该为30,为什么我在vc++上执行后是31?
搜索更多相关主题的帖子: 操作符 后置 原值 
2007-08-01 14:15
panxiang88
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-7-21
得分:0 
我看书上说后置++的工作原理是先将i原值保存,然后执行++i,此时i为6,最后再返回i的原值,即5,此时的5是个右值。这时候(i++)已经执行完了,接着再执行*和=,即将30赋给i,i被赋值前是6.
同样,++(i++),应该不能通过编译吧?因为i++返回的是右值
这是我理解的,你觉着呢?
2007-08-01 15:03
panxiang88
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-7-21
得分:0 
++i++是右结合,所以++i++就是++(i++),而i++返回一个右值,就是const类型的临时变量,是不能修改的,此时若++这个const临时变量是不能编译通过的。
而(++i)++就不一样了,++i返回的就是加过一后的i,就是说返回的是变量,此时再++是可以的;
总之,关键点就是i++执行后,返回的不是i!而是一个const,这个const再参与后面的运算;而++i返回的就是改变后的自身。
2007-08-01 20:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-159664-1-1.html




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

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