有人可以解释为什么以下程序会输出“4,6”而不是“4,4”。
MainProgram()
{
int x = 2;
int y = 0;
parse(4, out y);
Console.Write(y + ",");
y = y + parse(x, out y);
Console.Write(y);
}
int parse(int x, out int y)
{
y = x;
return y;
}
非常感谢!
答案 0 :(得分:6)
我认为您对parse
的第二次电话真的很感兴趣,对吧?
+
的操作数从左到右进行评估,然后进行添加,然后进行最终分配。
这一行:
y = y + parse(x, out y);
逻辑上是:
int lhs = y;
// Now lhs = 4, x = 2, y = 4
int rhs = parse(x, out y);
// Now rhs = 2, x = 2, y = 2
y = lhs + rhs;
// Now y = 6
这对你有帮助吗?
答案 1 :(得分:1)
在表达式y + parse(x, out y)
中,在调用解析之前的y值被捕获为表达式求值的一部分,然后调用解析(x,out y),在事实之后修改y的值。因此表达式的计算结果为4 + 2
。
答案 2 :(得分:0)
我在这里看不到问题。前4分配给y。然后将parse()的返回值中的2添加到其中。最后将结果6再次分配给y。 首先,在" +"之前评估(4)然后在" +"之后解析()评估(2),最后将4 + 2分配给y。