X = X ++之间有什么区别; vs X ++ ;?

Ahm*_*med 52 c#

你以前试过这个吗?

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.

谁能解释为什么这个?

Bri*_*ndy 73

X ++将增加该值,但随后返回其旧值.

所以在这种情况下:

static void Main(string[] args)
{
    int x = 10;
    x = x++;
    Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)

你只有11点的X,然后它回到10,因为10是(x ++)的返回值.

你可以改为做同样的结果:

static int plusplus(ref int x)
{
  int xOld = x;
  x++;
  return xOld;
}

static void Main(string[] args)
{
    int x = 10;
    x = plusplus(x);
    Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)

还值得一提的是,如果您愿意,您的预期结果为11:

static void Main(string[] args)
{
    int x = 10;
    x = ++x;
    Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)

  • 同意,但我认为这个问题只是问为什么会这样反应. (4认同)
  • 第一个短语是错误的,x ++它将首先返回值然后递增 - 而++ x将首先递增,而不是返回值. (4认同)
  • x = ++ x似乎没用,我没有特别看到这些结构中的任何一个的原因...只是x ++或++ x ..或者x = x +((天花板(Abs(x)+ 1) ))/(天花板(Abs(x)+ 1)))也应该工作 (3认同)

Kon*_*lph 57

在赋值中,x = x++首先提取x用于评估右侧表达式的旧值,在本例中为"x"; 然后,增加x1.最后,x通过赋值语句将表达式evaluate(10)的结果赋值给.

也许等效的代码会使困境变得清晰:

var tmp = x;
x++;
x = tmp;
Run Code Online (Sandbox Code Playgroud)

这相当于您x = x++在C#中的代码.


Vin*_*nie 15

x ++的行为是增加x但返回增量的值.由于这个原因,它被称为后增量.

所以x = x ++; 简单地说

1.然后返回值

2.然后增加x

3.将x的​​原始值(在步骤1中返回)分配给x.


rp.*_*rp. 11

x = 10
x = ++x 
Run Code Online (Sandbox Code Playgroud)

x 最终将达到11.


Chr*_*org 7

x++;
Run Code Online (Sandbox Code Playgroud)

执行以下操作:

int returnValue = x;
x = x+1;
return returnValue;
Run Code Online (Sandbox Code Playgroud)

如您所见,保存原始值,x递增,然后返回原始值.

这最终做的是将值保存在某处,设置x等于11,然后返回10,这会导致x被设置回10.注意x实际上在几个周期内变为11(假设没有编译器优化) .