加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C和Java之间的表达式评估顺序如何不同?

发布时间:2020-12-16 03:15:38 所属栏目:百科 来源:网络整理
导读:尝试了解这个页面上的例子,我的大脑起皱了: http://answers.yahoo.com/question/index?qid=20091103170907AAxXYG9 更具体的这个代码: int j = 4;cout j++ j ++j endl; 给出输出:566 现在这对我来说是有意义的,如果表达式从左到右进行评估,但是在Java中也
尝试了解这个页面上的例子,我的大脑起皱了:
http://answers.yahoo.com/question/index?qid=20091103170907AAxXYG9

更具体的这个代码:

int j = 4;
cout << j++ << j << ++j << endl;

给出输出:566

现在这对我来说是有意义的,如果表达式从左到右进行评估,但是在Java中也是类似的表达式:

int j = 4;
System.out.print("" + (j++) + (j) + (++j));

输出:456

这更直观,因为这表明它已经从左到右进行了评估.在各种网站上进行研究,似乎C在编译器之间的行为不尽相同,但我仍然不相信我的理解. Java和C之间的评估差异有什么解释?谢谢你.

解决方法

当操作有副作用时,C依赖于 sequence points规则来确定副作用(如增量,组合赋值等)是否必须生效.逻辑和/或/或其他(&&和||)运算符,三元?问号运算符和逗号创建序列点;,–,<等等不要. 相比之下,Java在进行进一步评估之前会完成副作用. 当您在没有序列点的情况下多次使用具有副作用的表达式时,C中未定义结果行为.任何结果都是可能的,包括没有逻辑意义的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读