我已经看到它们都被用在很多C#代码中,我想知道何时使用i++
或++i
(i
是一个数字变量int
,float
,double
等)。谁知道这个?
答案 0 :(得分:404)
答案 1 :(得分:172)
奇怪的是,看起来其他两个答案并没有拼出来,这绝对值得说:
i++
表示'告诉我i
的值,然后递增'
++i
表示'递增i
,然后告诉我价值'
它们是预增量,后增量运算符。 在这两种情况下,变量都会递增,但如果你要在完全相同的情况下取两个表达式的值,结果会有所不同。
答案 2 :(得分:21)
如果你有:
int i = 10;
int x = ++i;
然后x
将为11
。
但如果你有:
int i = 10;
int x = i++;
然后x
将为10
。
请注意,Eric指出,在两种情况下增量同时发生,但它是不同的结果给出的值(感谢Eric!)。
一般来说,我喜欢使用++i
,除非有充分的理由不这样做。例如,在编写循环时,我喜欢使用:
for (int i = 0; i < 10; ++i) {
}
或者,如果我只需要增加一个变量,我喜欢使用:
++x;
通常情况下,这种方式或其他方式没有多大意义并且归结为编码风格,但如果您在其他任务中使用运算符(例如在我的原始示例中),那么了解潜在的副作用很重要
答案 3 :(得分:5)
int i = 0;
Console.WriteLine(i++); // Prints 0. Then value of "i" becomes 1.
Console.WriteLine(--i); // Value of "i" becomes 0. Then prints 0.
这会回答你的问题吗?
答案 4 :(得分:5)
运算符的工作方式是它同时递增,但如果它在变量之前,则表达式将使用递增/递减的变量进行求值:
int x = 0; //x is 0
int y = ++x; //x is 1 and y is 1
如果它在变量之后,当前语句将使用原始变量执行,就好像它还没有递增/递减一样:
int x = 0; //x is 0
int y = x++; //'y = x' is evaluated with x=0, but x is still incremented. So, x is 1, but y is 0
除非必要,否则我同意dcp使用预增量/减量(++ x)。真的是我使用后递增/递减的唯一时间是while循环或那种循环。这些循环是相同的:
while (x < 5) //evaluates conditional statement
{
//some code
++x; //increments x
}
或
while (x++ < 5) //evaluates conditional statement with x value before increment, and x is incremented
{
//some code
}
您也可以在索引数组时执行此操作:
int i = 0;
int[] MyArray = new int[2];
MyArray[i++] = 1234; //sets array at index 0 to '1234' and i is incremented
MyArray[i] = 5678; //sets array at index 1 to '5678'
int temp = MyArray[--i]; //temp is 1234 (becasue of pre-decrement);
Etc等......
答案 5 :(得分:4)
只是为了记录,在C ++中,如果你可以使用(即)你不关心操作的顺序(你只想增加或减少并在以后使用它)前缀运算符更有效,因为它不必创建对象的临时副本。不幸的是,大多数人使用posfix(var ++)而不是前缀(++ var),因为这是我们最初学到的。 (我在接受采访时被问到这个问题)。不确定在C#中是否属实,但我认为它会是。
答案 6 :(得分:0)
简单的代码说明
int i = 0;
if (i++ > 0)
{
//will not execute, but "i" is icremented
}