我使用post增量/减量运算符读取某个地方比普通运算符要好得多。如此,我想知道它是如何更有效的?
答案 0 :(得分:3)
对于数字,++i
与i += 1
完全相同,i++
与tmp = i, i += 1, tmp
相似(假设,
的C语义)。因此,在这种情况下,请不要担心您正在使用哪个运营商。
对于具有++
和+=
的用户定义运算符的C ++类对象,性能当然取决于运算符的具体情况。实现。请注意,在C ++代码中,+
通常根据+=
定义(后增量通常根据预先增量定义),因此更喜欢使用+=
和preincrement ++
除非您需要分别进行非破坏性添加或在递增之前使用原始值。
C ++中+
的示例实现(请注意,lhs
按值传递,以便复制它,以便+=
不会更改原始对象):
Foo operator+(Foo lhs, Foo const& rhs)
{
return lhs += rhs;
}
C ++中postincrement的示例实现:
Foo Foo::operator++(int)
{
Foo orig(*this);
++*this;
return orig;
}
答案 1 :(得分:1)
对于Intel X86 CPU,如果有的话,没有多大优势。有些CPU具有用于存储器加载,存储,移动等地址的寄存器的前置和后置增量选项,在这些情况下,前置和后置增量运算符会更好,假设编译器不会无需前后增量优化代码,最终使用CPU前后增量功能。