我有我的大脑从试图了解此页面上的例子皱: http://answers.yahoo.com/question/index?qid=20091103170907AAxXYG9C++和Java之间的表达式评估顺序如何不同?
更具体地说,本代码:
int j = 4;
cout << j++ << j << ++j << endl;
给出了一个输出:566
现在,这是有道理的对我来说,如果表达式是从右到左评估的,然而在Java中有类似的表达式:
int j = 4;
System.out.print("" + (j++) + (j) + (++j));
给出的输出:456
哪一个更直观的,因为这表明它已经从左向右计算。在各种网站上研究这一点,似乎用C++编译器之间的行为有所不同,但我仍然不相信自己明白。 Java和C++之间评估的这种差异有什么解释?感谢所以。
一切都不一样。它不仅在编译器之间不同,而且还依赖于rules_,并且每次在同一个编译器上进行编译时,每次运行该程序时,甚至每次执行该行时都会发生变化。的 –
可能重复的[如何未定义是未定义的行为?](http://stackoverflow.com/questions/7961067/how-undefined-is-undefined-behavior) –
C++被设计为最优化,这意味着标准不保证某些结果,以便编译器可以自由地生成最优代码。您在示例中使用的序列是我认为明确禁止的序列。 –