| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1614 人关注过本帖
标题:[讨论][求助]关于后置自增操作符的问题
取消只看楼主 加入收藏
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
快速回复:[讨论][求助]关于后置自增操作符的问题
数据加载中...
 
   



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

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