奇怪的帖子和预先行为(c ++和c#)

时间:2011-11-02 17:21:40

标签: c# c++

  

可能重复:
  Undefined Behavior and Sequence Points

我想知道c#中其他c ++代码中的这2个代码块之间的结束结果。 这两个块给出了不同的结果,没有任何意义,任何解释都会有所帮助。

  //c++
  int x=0;
  x=x++ + ++x;// result=3

  //c#
  int x=0;
  x=x++ + ++x;// result=2 (logical answer)

2 个答案:

答案 0 :(得分:6)

在C ++中,这是未定义的行为,因为这里已经讨论了很多次。在C#中,行为定义明确。对于未定义的行为,任何结果都是可能的。

无论行为是否定义得当,你都不应该写这样的代码。

答案 1 :(得分:4)

在C ++中,我认为行为未指定。

在C#中,评估的顺序通常更加严格,答案是有保证的。

在任何一种语言中,都应该避免这样的代码。这很难理解,并且通常用于表明作者是如何“聪明”的,而不是创建可以很容易看到正确的代码,并在必要时进行更改。