可能的重复:
C++ 中 i++ 和 ++i 之间有性能差异吗? https://stackoverflow.com/questions/24901/is-there-a-performance-difference-between-i-and-i-in-c
我正在编写一个程序,其中使用迭代器循环遍历 std::vector 。有人告诉我,在 for 语句中执行 ++it 可以提高代码效率。换句话说,他们是在说:
for ( vector<string>::iterator it=my_vector.begin(); it != my_vector.end(); ++it )
运行速度比
for ( vector<string>::iterator it=my_vector.begin(); it != my_vector.end(); it++ )
这是真的?如果是,效率提升的原因是什么?它 ++/++ 所做的只是将迭代器移动到向量中的下一项,不是吗?
预增量更快的原因是后增量必须复制旧值才能返回。作为GotW #2 http://www.gotw.ca/gotw/002.htm说的是,“预增量比后增量更有效,因为对于后增量,对象必须增量自身,然后返回包含其旧值的临时值。请注意,即使对于像 int 这样的内置函数也是如此。”
GotW #55 http://www.gotw.ca/gotw/055.htm提供了后置增量的规范形式,这表明它必须进行前置增量以及更多的工作:
T T::operator++(int)
{
T old( *this ); // remember our original value
++*this; // always implement postincrement
// in terms of preincrement
return old; // return our original value
}
正如其他人所指出的,某些编译器在某些情况下可能会对此进行优化,但如果您不使用返回值,那么最好不要依赖此优化。另外,对于具有简单复制构造函数的类型,性能差异可能非常小,尽管我认为在 C++ 中使用预自增是一个好习惯。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)