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

前端之家收集整理的这篇文章主要介绍了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.f2er.com/c/112067.html

猜你在找的C&C++相关文章