这是在C#.NET a ++ + ++中完美定义的吗?如果是,那为什么我会得到奇怪的输出?

Mud*_*ain 1 .net c# undefined-behavior pre-increment post-increment

我知道下面的代码会导致根据c/c ++标准的未定义行为但是在c#中呢?,经过一些搜索,我发现在c#中,表达式中的所有参数/变量都是从左到右计算的(如果错误请纠正我),如果这是真的,那么下面程序的结果(res变量的输出)应该是3,但它的4 ??

class Program
{
    static void Main(string[] args)
    {
        int a = 1;
        int res = (a++) + (++a); //Will This Lead to Undefined Behavior(Like in C/C++)..??
        Console.WriteLine(res);
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

当使用从左到右的评估检查时,结果适用于这些表达式.

res = a + ++a; \\Successfully evaluates res to 3

res = ++a + a; \\Sussessfully evaluates res to 4

res = ++a + a++; \\Successfully evaluates res to 4

同样

res= a++ + ++a ;\\should be 3, why i get it 4 ??

任何人都可以解释我的困惑.

usr*_*usr 5

您的计划相当于:

var a = 1;
var temp0 = a++;
var temp1 = ++a;
var res = temp0 + temp1;
Run Code Online (Sandbox Code Playgroud)

结果就是这样4.

更简单:

var a = 1;
var temp0 = a; a++;
a++; var temp1 = a;
var res = temp0 + temp1;
Run Code Online (Sandbox Code Playgroud)

C#没有像C/C++那样的未定义行为.这会破坏.NET的安全属性.那说.NET可以并且确实在几个地方有实现定义的行为.不过这里不是.