使用 i++ 或 ++i 编写循环

Writing loops with i++ or ++i

本文关键字:循环 ++i i++ 使用      更新时间:2023-10-16

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

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

但我看到许多专家从

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

有什么真正的区别,还是它们是一样的?

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

谢谢!

两者之间没有区别。前递增和后递增是唯一的差异。

i++++i 之间的区别在于表达式的值。

i++值是增量前的i值。++i的值是递增后的i值。

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

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 中是 l 值,但i++不是。

在C++中是有区别的。前缀运算符将返回对值的引用,而后缀运算符将返回副本,因此比前缀运算符慢。

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

预递增通常是首选,因为虽然它对基元类型没有区别,但对于迭代器来说可能更快,因为预递增不必返回其旧值的副本。

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