介绍
如果你之前编写过 for 循环,几乎可以肯定使用过 i++ 来增加循环变量。但是,你有没有想过为什么那么做呢?
显然,使用 i++ 的最终结果是使变量 +1 ,但是有很多方法可以做到这一点,如: ++i,i = i + 1。
这篇文章中会介绍 ++i 和 i++ ,并解释为什么在大多数情况下 ++i 可能比 i++ 更好。
i++
i++ 是我们在循环中经常使用的方法,其实现如下:
int j = i;
i = i + 1;
return j;
i++ 必须返回 i 的原始值,而不是返回增量 i + 1 ,因此,必须存储 i 的旧版本。这就意味着需要额外的内存来存储该值,而且,在大多数情况下,我们实际上并不会使用旧值,而只是将其丢弃。
++i
++i 方法很少使用,通常是年长的程序员以 C 和 C++ 等语言使用。其实现如下:
i = i + 1;
return i;
值得注意的是,这里,不必保存 i 的旧值,而是简单的将其自 +1 ,并返回。这与我们在 for 循环中使用的契机相吻合,因为,我们很少使用 i 的旧值。
注意事项
在了解了两个运算符之间的不同之后,你可能会注意到,由于 i 的缓存值从未在 i++ 之后使用,因此,编译器会优化该运算符,从而使两个运算符等效。
对于基本类型(如整型),很可能是这样的。
但是,对于更复杂的类型,如:用户定义的类型或带有 + 操作重载的迭代器,编译器可能无法安全地优化缓存操作。
因此,似乎在大多数情况下,只要你不需要递增的值的前一个值,++i 就会好于或等于 i++。
关注公众号,阅读更多技术好文