Ism*_*ush 54 c++ for-loop pre-increment post-increment
是否有一些程序员++i在正常的for循环中写入而不是写入i++?
Dre*_*all 109
++i 由于它的语义,它的效率稍高:
++i; // Fetch i, increment it, and return it
i++; // Fetch i, copy it, increment i, return copy
Run Code Online (Sandbox Code Playgroud)
对于类似int的索引,效率增益最小(如果有的话).对于迭代器和其他较重的对象,避免该副本可能是一个真正的胜利(特别是如果循环体不包含太多工作).
作为一个例子,考虑以下循环使用理论上的BigInteger类提供任意精度整数(因此某种类似矢量的内部):
std::vector<BigInteger> vec;
for (BigInteger i = 0; i < 99999999L; i++) {
vec.push_back(i);
}
Run Code Online (Sandbox Code Playgroud)
i ++操作包括一个循环的复制构造(即操作符新的,逐位复制)和销毁(操作符删除),这个循环除了基本上再复制一个索引对象之外什么都不做.从本质上讲,你只需要使用后缀增量就可以完成的工作量增加一倍(并且最有可能增加内存碎片),前缀就足够了.
Oli*_*rth 84
对于整数,前后增量之间没有区别.
如果i是非平凡类的对象,则++i通常是首选,因为对象被修改然后被评估,而i++在评估之后修改,因此需要进行复制.
对于整数,这是首选。
如果循环变量是一个类/对象,它可能会产生影响(只有分析才能告诉您它是否有显着差异),因为后增量版本要求您创建该对象的副本并被丢弃。
如果创建该副本是一项昂贵的操作,那么您每次执行循环时都需要支付一次该费用,根本没有任何原因。
如果您养成了始终使用 in for 循环的习惯++i,则无需停下来思考在这种特定情况下所做的事情是否有意义。你总是这样。
| 归档时间: |
|
| 查看次数: |
99655 次 |
| 最近记录: |