微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C和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中未定义结果行为.任何结果都是可能的,包括没有逻辑意义的结果.

原文地址:https://www.jb51.cc/c/112067.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐