代码之家  ›  专栏  ›  技术社区  ›  Jace Rhea

C中的方法参数分配#

  •  3
  • Jace Rhea  · 技术社区  · 14 年前

    给定下面的代码,方法参数y在bar(int y)中的赋值是x还是1?我意识到它们在逻辑上是等价的,但我想理解分配操作。

    class Program
    {
        static void Main(string[] args)
        {
            var foo = new Foo();
            var x = 0;
            foo.Bar(x = 1);
        }
    }
    
    public class Foo
    {
        public void Bar(int y)
        {
        }
    }
    
    5 回复  |  直到 14 年前
        1
  •  6
  •   Guffa    14 年前

    参数获取赋值的值。

    考虑这样的代码:

    int x = 0;
    int y = (x = 1);
    x = 42;
    foo.Bar(y);
    

    即使 x 换了一次, y 仍然包含 1 .

        2
  •  4
  •   a1ex07    14 年前

    它被分配给 x=1 等于1。

        3
  •  3
  •   bdukes Jon Skeet    14 年前

    赋值运算符的结果将传递给 Bar ,其中“是分配给左侧的值”(来自 Eric Lippert's blog )

    在这种情况下,这就是 int 价值 1 .

        4
  •  1
  •   Rod    14 年前

    你必须考虑评估的顺序。在调用函数之前,需要计算大括号内的任何表达式。然后将结果用作函数调用中的参数。

    在您的情况下, x = 1 是表达式。它需要先被评估为一个任务 (x=1) 然后,可以使用结果值x并将其用作 bar .

    它相当于

    x = 1
    foo.bar(x)
    

    您可以看到,如果您查看 x 在接到电话后 foo .

        5
  •  0
  •   James    14 年前

    在()中的任何内容都将传递给y,只要它是int。

    但是我想直接回答这个问题,x是实际通过的,而不是1,x等于1,那么y=x=1。