我有一个关于编写循环的问题。我总是从
(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
中是左值,但i++
不是。
在 C++ 中存在差异。虽然前缀运算符将返回对值的引用,但后缀运算符将返回一个副本,因此比前缀运算符慢。
前增量和后增量之间的主要区别在于返回值。
后递增返回在变量增加之前已经存在的值,本质上是创建旧值的副本。预递增返回对新值的引用,从而避免创建临时变量。
一般来说,它没有什么区别,主要是口味问题,但在某些内存不足的情况下,预增量选项可能更有用。我还读到后增量版本应该更慢(因为它创建了一个新的临时变量),但我还没有找到任何确凿的证据
通常首选预增量,因为虽然它对原始类型没有影响,但对于迭代器来说可能更快,因为预增量不必返回其旧值的副本。
由于 preincrement 有时更快(使用非原始类型,如迭代器),因此即使在没有性能差异的情况下也可以进入一个好习惯,这就是许多人推荐它的原因。例如,这是C++ 编码标准中的第 28 项。