在C#中,myInt ++和++ myInt有什么区别?

时间:2009-01-12 21:11:56

标签: c# syntax

我很难理解用C#递增变量之间的区别是什么:

myInt++;

++myInt;

什么时候使用哪一个?

我会给voteCount ++以获得最佳答案。或者我应该给它++ voteCount ...

11 个答案:

答案 0 :(得分:52)

单独编写(如图所示)没有区别 - 在两种情况下,myInt都会增加1。

但是在表达式中使用它时会有所不同,例如:像这样的东西:

MyFunction(++myInt);
MyFunction(myInt++);

在第一种情况下,myInt会递增,新的/递增的值会传递给MyFunction()。在第二种情况下,myInt的旧值传递给MyFunction()(但myInt在调用函数之前仍然会递增)。

另一个例子是:

int myInt = 1;
int a = ++myInt;
// myInt is incremented by one and then assigned to a.
// Both myInt and a are now 2.
int b = myInt++;
// myInt is assigned to b and then incremented by one.
// b is now 2, myInt is now 3

BTW:在评论中指出Don,相同的规则对递减操作也有效,这些操作的正确术语是:

++i; // pre-increment
i++; // post-increment
--i; // pre-decrement
i--; // post-decrement

正如Jon Skeet所指出的那样:

  

其他人已经证明了它的成就   差异,并评论说   一个单一的声明它没有   差。

     

我想补充说差不多了   总是一个坏主意在它的地方使用它   有所作为。我怀疑那里   可能有时候会更多   可读的代码如:

Console.WriteLine("Foo: {0}", foo++);
     

比:

Console.WriteLine("Foo: {0}", foo);
foo++; 
     

......但他们非常罕见!该   这两个样本中的后一个使得   订购晶莹剔透 -   前者需要一点思考   (无论如何,对我可怜的大脑)。考虑到   可读性首先。

答案 1 :(得分:11)

其他人已经证明它在哪里有所作为,并评论说,作为单一陈述,它没有任何区别。

我想补充一点,在它产生影响的地方使用它几乎总是一个坏主意。我怀疑可能有时可能会有更多可读代码,例如:

Console.WriteLine("Foo: {0}", foo++);

比:

Console.WriteLine("Foo: {0}", foo);
foo++;

......但他们非常罕见!这两个样本中的后一个使得排序晶体立即变得清晰 - 前者需要一点思考(无论如何,对于我可怜的大脑)。首先考虑可读性。

答案 2 :(得分:9)

除非它在表达式中,否则它不会出现,即

myInt=1;
x=myInt++;

与:

不同
myInt=1;
x=++myInt;

第一个将1分配给x,因为赋值发生在增量之前。

第二个将2分配给x,因为赋值发生在增量之后。

答案 3 :(得分:6)

在作业或表达中,例如

x = ++myInt; // x = myInt + 1
x = myInt++; // x = myInt

这也可以在for循环或if语句之类的表达式中使用。例如,如果seek为0且count为3,请执行以下操作。

while(seek++ < count) {
   Console.WriteLine(seek);
}
对于搜索,

导致输出1,2和3,以及

while(++seek < count) {
   Console.WriteLine(seek);
}

搜索结果为1和2。所以++ myInt在评估其值之前递增myInt,其中myInt ++在评估之后递增。

答案 4 :(得分:4)

myInt ++(4个CPU指令)

LOAD AX, #myInt // From myInt memory to a CPU register
COPY AX, BX
INCREMENT BX
STORE BX, #myInt
// Use AX register for the value

++ myInt(3个CPU指令)

LOAD AX, #myInt // From myInt memory to a CPU register
INCREMENT AX
STORE AX, #myInt
// Use AX register for the value

答案 5 :(得分:3)

如果你正在做

,这是有区别的
int x = 7;
int x2 = x++;

=> x2 is 7 and x is 8

但在做的时候

int x = 7;
int x2 = ++x;

=> x2 is 8 and x is 8

答案 6 :(得分:3)

确定何时返回该操作的结果。

以下是MSDN site

的示例
static void Main() 
{
    double x;
    x = 1.5;
    Console.WriteLine(++x);
    x = 1.5;
    Console.WriteLine(x++);
    Console.WriteLine(x);
}

输出:

2.5
1.5
2.5

答案 7 :(得分:3)

预修复操作符++ myInt是一种减少行的方法:在将变量传递给其他地方之前增加变量。这也是一种降低可读性的好方法,因为它并不常见。

MyMethod(++myInt); 

VS。

myInt++; 
MyMethod(myInt);

对我来说,第二个更容易阅读。

答案 8 :(得分:3)

我认为从评估修改的顺序来理解最简单。

  • 后缀运算符(x ++) 首先评估,然后修改
  • 前缀运算符(++ x)修改 首先,评估最后。

(操作顺序在运算符和变量的类型顺序中很明显)

即。当在表达式中使用时,后缀运算符在应用运算符之前计算并使用表达式中的变量的当前值(返回语句或方法调用)。使用前缀运算符,它是另一种方式。

答案 9 :(得分:2)

++ myInt会在执行相关行之前向myInt添加一个,myInt ++将在之后执行。

示例:

int myInt;

myInt = 1;
someFunction(++myInt); // Sends 2 as the parameter

myInt = 1;
someFunction(myInt++); // Sends 1 as the parameter

答案 10 :(得分:0)

例如,如果您执行以下操作:

int myInt = 5;

Foo(++myInt);

void Foo(int x)
{
   Console.WriteLine(x);
}

这将打印出6。

Foo(myInt++);

将打印出5;

基本上,++ myInt增量FIRST使用变量SECOND。 myInt ++恰恰相反。