我想知道c#中其他c ++代码中的这2个代码块之间的结束结果。 这两个块给出了不同的结果,没有任何意义,任何解释都会有所帮助。
//c++
int x=0;
x=x++ + ++x;// result=3
//c#
int x=0;
x=x++ + ++x;// result=2 (logical answer)
答案 0 :(得分:6)
在C ++中,这是未定义的行为,因为这里已经讨论了很多次。在C#中,行为定义明确。对于未定义的行为,任何结果都是可能的。
无论行为是否定义得当,你都不应该写这样的代码。
答案 1 :(得分:4)
在C ++中,我认为行为未指定。
在C#中,评估的顺序通常更加严格,答案是有保证的。
在任何一种语言中,都应该避免这样的代码。这很难理解,并且通常用于表明作者是如何“聪明”的,而不是创建可以很容易看到正确的代码,并在必要时进行更改。