请使用以下代码(可用作控制台应用程序):
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.显然这不是正在发生的事情.
你能解释一下编译器的作用或运行时会发生什么吗?为什么结果为零?
某种免责声明:我绝对知道你不会(也可能不会)使用这段代码.我知道我永远不会.尽管如此,我发现知道为什么它以这种方式行动以及究竟发生了什么是很有趣的.
我有时会对速记增量操作感到困惑.
因为当我在BASIC中进行小编程时,我得到了一些如何坚持使用a = a + 1,这是一种长期痛苦的方式,即"获取当前值,为其添加1,然后将新值存储回'.
1] a = a +1 ;
2] a++ ;
3] ++a;
4] a +=1;
Run Code Online (Sandbox Code Playgroud)
[1]和[4]在功能上有不同的表示法,对吗?
由于增量符号++之前和之后的事实,2]和3]的工作方式完全不同.对?
我可以安全地假设下面的内容吗?
int f(int x){ return x * x;}
y = f(x++) -> for x =2, f(x) = x^2
f(x) ======> y= 2^2 =4
x=x+1; ======> x= 2+1 = 3
y = f(++x) -> for x =2, f(x) = x^2
x=x+1 ===========> x = 2+1 = 3
f(x) ===========> y =3^2 = 9
Run Code Online (Sandbox Code Playgroud)