0

我有一个关于编写循环的问题。我总是从

(int i=0; i<10; i++)

但我看到很多专家都是从

(int i=0; i<10; ++i)

有没有真正的区别,或者它们是一样的?

当然,我知道前置增量和后置增量之间的区别。我的意思是在编写循环时我应该使用哪一个?或者这取决于。

谢谢!

4

4 回答 4

5

两者没有区别。前增量和后增量是唯一的区别。

i++和之间的区别++i是表达式的值。

该值i++i增量之前的值。的值++ii增量后的值。

但是,在您的循环中,它没有任何区别。

int i = 0;
00000088  xor         edx,edx 
0000008a  mov         dword ptr [ebp-40h],edx 
            i++;
0000008d  inc         dword ptr [ebp-40h] 
            ++i;
00000090  inc         dword ptr [ebp-40h] 

如您所见,它对性能没有任何影响,但在某些情况下,您可能希望在序列点之后或之前增加一个数字。

在 C++++i中是左值,但i++不是。

于 2013-11-02T21:22:33.243 回答
2

在 C++ 中存在差异。虽然前缀运算符将返回对值的引用,但后缀运算符将返回一个副本,因此比前缀运算符慢。

于 2013-11-02T21:23:55.970 回答
1

前增量和后增量之间的主要区别在于返回值。
后递增返回在变量增加之前已经存在的值,本质上是创建旧值的副本。预递增返回对新值的引用,从而避免创建临时变量。
一般来说,它没有什么区别,主要是口味问题,但在某些内存不足的情况下,预增量选项可能更有用。我还读到后增量版本应该更慢(因为它创建了一个新的临时变量),但我还没有找到任何确凿的证据

于 2013-11-02T21:26:07.850 回答
0

通常首选预增量,因为虽然它对原始类型没有影响,但对于迭代器来说可能更快,因为预增量不必返回其旧值的副本。

由于 preincrement 有时更快(使用非原始类型,如迭代器),因此即使在没有性能差异的情况下也可以进入一个好习惯,这就是许多人推荐它的原因。例如,这是C++ 编码标准中的第 28 项。

于 2013-11-02T21:24:44.427 回答