|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 请教大家个问题
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
512
人关注过本帖
标题:
请教大家个问题
只看楼主
加入收藏
skywalker_
等 级:
新手上路
帖 子:13
专家分:0
注 册:2010-1-24
结帖率:
100%
楼主
收藏
已结贴
√
问题点数:2 回复次数:2
请教大家个问题
a+b*c,编译器扫描到+后继续扫描,碰到*,因为*优先级高,所以先执行*后执行+.
c=i++,编译器扫描到=后继续扫描,碰到++,++优先权高,所以该先执行++再赋值。
然而书上还说该式是先赋值后自增的,i++是后自增,实际运行结果也说明赋值后才自增的。
这不是矛盾了吗?
期待高人,这个问题问了100个人了,没一个完美的解释。
搜索更多相关主题的帖子:
完美
编译器
优先级
优先权
2010-01-28 18:10
举报帖子
使用道具
赠送鲜花
pangding
来 自:北京
等 级:
贵宾
威 望:
94
帖 子:6784
专家分:16751
注 册:2008-12-20
第
2
楼
收藏
得分:2
问了一100个人了,问题点数才2?
这是表达式求值的问题,只要概念过关的话,是很好答的。
c = i++
按照表达式的优先级,后缀超高,明显要先算后缀表达式的值,再进行赋值。
上面那个代码等价于:
c = (i++)
后面的表达式先求值。这个表达式的值是多少?就是 i 未自增前的值。这个值求完了,赋给 c 就行了。
不过这之后,i 还要自增一下。
C 标准没说这个 i 的值应该什么时候自增。也可能求完值就自增了,但这不影响这个表达式的值(还是 i 原来的值)。也可能是赋完值才自增,反正这也不影响表达式的值。当然也可以先自增,再求值,不能说这是错误,只不过只时候再求值时显得很别扭。
这种与计算表达式无关的行为就是副作用。C 标准没有规定这些效果应该怎么实现。但再这个语句执行之前,副作用应该没有产生,下个语句执行前副作用应该全部执行完毕。编译器可以用任何合理的方式实现,并且无需在文档中声明。(这实现方式,专业一点的说法叫 未定义)
[
本帖最后由 pangding 于 2010-1-28 23:16 编辑
]
2010-01-28 23:14
举报帖子
使用道具
赠送鲜花
skywalker_
等 级:
新手上路
帖 子:13
专家分:0
注 册:2010-1-24
第
3
楼
收藏
得分:0
好,你的解释很合理。总之好多人不能解释,我分只有13分了,给少了,不好意思啊
2010-01-29 14:24
举报帖子
使用道具
赠送鲜花
3
1/1页
1
快速回复:
请教大家个问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.028937 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved