Are*_*yst 59 c# increment ref operator-precedence
这是一个简单的控制台应用程序代码,它返回一个我完全不理解的结果.
试着想一想它是否在控制台中输出0,1或2:
using System;
namespace ConsoleApplication
{
class Program
{
static void Main()
{
int i = 0;
i += Increment(ref i);
Console.WriteLine(i);
Console.ReadLine();
}
static private int Increment(ref int i)
{
return i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
答案是0.
我不明白的是为什么i++
从Increment
方法上执行的post增量ref
(不是在传递的变量的副本上)确实增加了变量,但它稍后会被忽略.
我的意思是在这个视频中:
有人可以解释这个例子以及为什么在调试期间我看到该值增加到1,但它又回到0?
Jak*_*rtz 102
i += Increment(ref i);
相当于
i = i + Increment(ref i);
Run Code Online (Sandbox Code Playgroud)
赋值右侧的表达式从左到右进行计算,因此下一步是
i = 0 + Increment(ref i);
Run Code Online (Sandbox Code Playgroud)
return i++
返回当前值i
(为0),然后递增i
i = 0 + 0;
Run Code Online (Sandbox Code Playgroud)
在赋值之前,值为i
1(在Increment
方法中递增),但赋值再次为0.
Dar*_*l42 18
我认为这里的"魔术"只是操作优先于操作的顺序
i += Increment(ref i)
Run Code Online (Sandbox Code Playgroud)
是相同的
i = i + Increment(ref i)
Run Code Online (Sandbox Code Playgroud)
+操作从左到右执行
所以首先我们拿...我当时是0 ...
然后我们添加Increment(ref i)的结果......这也是0 ... 0 + 0 = 0 ...但等待......在得到那个结果之前我实际上是递增的...
这个增量发生在我们+操作的左操作数被评估后...所以它不会改变一个东西... 0 + 0仍然是0 ...因此我在+操作被执行后被赋值为0
归档时间: |
|
查看次数: |
3859 次 |
最近记录: |