搜索
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ [讨论][求助]关于后置自增操作符的问题
标题:
[讨论][求助]关于后置自增操作符的问题
取消只看楼主
panxiang88
等 级:
新手上路
帖 子: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
等 级:
新手上路
帖 子:33
专家分:0
注 册:2007-7-21
第
2
楼
得分:0
我看书上说后置++的工作原理是先将i原值保存,然后执行++i,此时i为6,最后再返回i的原值,即5,此时的5是个右值。这时候(i++)已经执行完了,接着再执行*和=,即将30赋给i,i被赋值前是6.
同样,++(i++),应该不能通过编译吧?因为i++返回的是右值
这是我理解的,你觉着呢?
2007-08-01 15:03
panxiang88
等 级:
新手上路
帖 子:33
专家分:0
注 册:2007-7-21
第
3
楼
得分:0
++i++是右结合,所以++i++就是++(i++),而i++返回一个右值,就是const类型的临时变量,是不能修改的,此时若++这个const临时变量是不能编译通过的。
而(++i)++就不一样了,++i返回的就是加过一后的i,就是说返回的是变量,此时再++是可以的;
总之,关键点就是i++执行后,返回的不是i!而是一个const,这个const再参与后面的运算;而++i返回的就是改变后的自身。
2007-08-01 20:51
3
1/1页
1
参与讨论请移步原网站贴子:
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