请使用以下代码(可用作控制台应用程序):
static void Main(string[] args)
{
int i = 0;
i += i++;
Console.WriteLine(i);
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
结果i是0.我预计2(正如我的一些同事所做的那样).编译器可能会创建某种导致i为零的结构.
我期望2的原因是,在我的思路中,右手语句将首先被评估,用1递增i.比它被添加到i.因为我已经是1,所以它加1比1.所以1 + 1 = 2.显然这不是正在发生的事情.
你能解释一下编译器的作用或运行时会发生什么吗?为什么结果为零?
某种免责声明:我绝对知道你不会(也可能不会)使用这段代码.我知道我永远不会.尽管如此,我发现知道为什么它以这种方式行动以及究竟发生了什么是很有趣的.
你以前试过这个吗?
static void Main(string[] args)
{
int x = 10;
x = x++;
Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)
产量:10.
但对于
static void Main(string[] args)
{
int x = 10;
x++;
Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)
产量:11.
谁能解释为什么这个?