不同的结果在C,C++;还有Java。为什么?

不同的结果在C,C++;还有Java。为什么?,java,c++,c,Java,C++,C,可能重复: 输出 n=550的值(Java) n=500(C和C++)< < /P> 为什么结果不一样?为什么不同?因为你所做的是不确定的。增量运算符不应放置在变量递增的赋值表达式中 i = i++; //undefined n = i++ + i; // also undefined 在Java中,这是一个定义良好的操作。它将: 增量i(现在是11) 生成i(10)的旧值,因为您使用了 乘以5(10*5=50) 将其乘以i的当前值(50*11=550) 在C和C++中,任何事情都可能发生。

可能重复:

输出

n=550的值(Java) n=500(C和C++)< < /P>
为什么结果不一样?为什么不同?

因为你所做的是不确定的。增量运算符不应放置在变量递增的赋值表达式中

i = i++; //undefined
n = i++ + i; // also undefined

在Java中,这是一个定义良好的操作。它将:

  • 增量
    i
    (现在是11)
  • 生成
    i
    (10)的旧值,因为您使用了
  • 乘以5(10*5=50)
  • 将其乘以
    i
    的当前值(50*11=550)
    在C和C++中,任何事情都可能发生。如果有什么可能发生,这就解释了结果,无论它们是什么,以及它们是否对你有意义。C++和C++中的< /P> < P>,如:

    j = i++ + i;
    

    由于缺少序列点,未定义。在Java中,它们定义良好。因此,您可以看到结果上的差异。

    他没有这样使用它。他在做(i++)*5*i。问题是我什么时候得到递增。二元与此有什么关系?是的,这个答案是胡说八道(除了说这是未定义的部分)。仍然是胡说八道。
    intn有什么问题;n=i++?这仍然与问题无关。可能是因为它们是不同的语言吗?任何试图在任何语言中使用类似代码的人都应该被带出来枪毙。@Hovercraft Of Eels:与我见过的一些lambdas没有太大区别……我想当一个成熟的,普通语言如C或C++以不可预知的方式反应。这与通常的编程经验完全相反。这就是为什么这个问题不断出现的原因。原谅我吹毛求疵,但这不是“因此”的正确用法-他很容易看到相同的结果,只是碰巧它们被以不同的顺序进行评估。换句话说,“550”可以通过C++代码输出。我认为操作符在C++和java中被处理相同的优先级,但是java的处理方式不同。在JAVA++的上下文中,具有比%更高的优先级,因为文档int i=10;int n=i++*5*i;在本例中,i++已完成,但若表达式如下所示:int i=10;int n=i++*5;然后,即使乘法的优先级较低,也会在乘法后处理i++。为什么?@Arafangion:“因此”在我看来很好。第一句是陈述句;第二个陈述是结论。(请注意,我小心地说“可以”,而不是“将”。@Anand:这与运算符优先级无关。@Anand无法从运算符优先级的角度对此进行推理。你必须明白什么是a。
    
    j = i++ + i;