i ++和++ i在循环中的区别?

for循环中, ++ii++有区别吗? 它只是一个语法的东西?


一个++被称为后缀。

将1加1,返回旧值。

++ a被称为前缀。

将1加1,返回新值。

C#:

string[] items = {"a","b","c","d"};
int i = 0;
foreach (string item in items)
{
    Console.WriteLine(++i);
}
Console.WriteLine("");

i = 0;
foreach (string item in items)
{
    Console.WriteLine(i++);
}

输出:

1
2
3
4

0
1
2
3

foreachwhile循环取决于您使用的增量类型。 对于下面的for循环,由于您不使用i的返回值,因此没有区别:

for (int i = 0; i < 5; i++) { Console.Write(i);}
Console.WriteLine("");
for (int i = 0; i < 5; ++i) { Console.Write(i); }

0 1 2 3 4
0 1 2 3 4

如果使用评估值,那么增量的类型变得很重要:

int n = 0;
for (int i = 0; n < 5; n = i++) { }

预增加++我增加i的值并评估为新增值。

int i = 3;
int preIncrementResult = ++i;
Assert( preIncrementResult == 4 );
Assert( i == 4 );

后递增i ++递增i的值并评估为原始非递增值。

int i = 3;
int postIncrementResult = i++;
Assert( postIncrementtResult == 3 );
Assert( i == 4 );

在C ++中,预增量通常是您可以使用的首选。

这是因为如果使用后增量,它可能要求编译器必须生成创建额外临时变量的代码。 这是因为被增量的变量的前一个值和新值都需要保存在某个地方,因为它们可能在被评估的表达式的其他地方被需要。

因此,至少在C ++中,可能会有性能差异,指导您选择使用哪一个。

当被增量的变量是用户定义的类型并带有重载的++运算符时,这主要只是一个问题。 对于原始类型(int等),没有性能差异。 但是,值得坚持前置增量操作符作为指导,除非后增加操作符肯定是需要的。

这里有更多的讨论:
https://web.archive.org/web/20170405054235/http://en.allexperts.com/q/C-1040/Increment-operators.htm

在C ++中,如果你使用的是STL,那么你可能会用循环迭代器。 这些主要覆盖了++运算符,所以坚持预增加是个好主意。 编译器会一直变得更聪明,而新版本可能会执行优化,这意味着没有性能差异 - 尤其是如果增加的类型在头文件中内联定义(正如STL实现一般),以便编译器可以看到该方法被执行,然后可以知道哪些优化是安全的执行。 即便如此,它仍然值得坚持预增量,因为循环会被执行很多次,这意味着很小的性能损失很快就会被放大。


在其他语言(如C ++)中,++运算符不能重载时,没有性能差异。 在循环中使用以推进循环变量,前后增量运算符是等效的。

更正:在C#中重载++是允许的。 看起来,虽然,与C ++相比,在C#中,不能独立重载前后版本。 所以,我假设如果在C#中调用++的结果没有被赋值给一个变量或者被用作复杂表达式的一部分,那么编译器会将++的前后版本降低到等效执行的代码。


在c#中,在for循环中使用时没有区别。

for (int i = 0; i < 10; i++) { Console.WriteLine(i); }

输出与之相同的东西

for (int i = 0; i < 10; ++i) { Console.WriteLine(i); }

正如其他人指出的那样,当在一般情况下使用i ++和++时,我有一个微妙而显着的区别:

int i = 0;
Console.WriteLine(i++);   // Prints 0
int j = 0;
Console.WriteLine(++j);   // Prints 1

我++读取我的价值,然后增加它。

++我增加我的价值,然后读取它。

链接地址: http://www.djcxy.com/p/72253.html

上一篇: Difference between i++ and ++i in a loop?

下一篇: Is there a performance difference between i++ and ++i in C++?