关于c++ 为什么是十六啊

[复制链接]
查看11 | 回复0 | 2007-1-5 13:34:54 | 显示全部楼层 |阅读模式
这样的表达式的求值顺序是没有定义的。因为分号是一个顺序点,而二元加号不是一个顺序点,非顺序点连接起来的各个表达式的求值顺序是任意的,并且它们的副作用只在下一个顺序点之后才生成,这里分号是一个顺序点,理论上所有++操作和赋值操作的副作用都要在分号之后才生成。但是这一点并不是强制编译器必须要等到分号结束之后才执行赋值操作,只是规定一个顺序点之前的表达式求值所产生的副作用只有等到这个顺序点结束才是确定的。而在这个顺序点结束之前,编译器对位于该个顺序点和前一个顺序点之前的表达式以任意顺序求值。你这个表达式不符合规定,编译器给出的值也具有一定的任意性,没有人能确切地给出解释说为什么结果就是16,你只能去问编译器。楼主,如果接下来有人给你解释说如此这般求出来的值就是16,劝你不要相信,他肯定不了解什么是顺序点,他又不是编译器,他怎么知道编译器就一定是照他解释的顺序算的呢?如果,对上面的解释不太明白,你就应该好好参考一下顺序点的定义和作用了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行