后增量和预增量算子比正常更有效" +"运营商?

时间:2014-07-29 00:47:32

标签: java c++

我使用post增量/减量运算符读取某个地方比普通运算符要好得多。如此,我想知道它是如何更有效的?

2 个答案:

答案 0 :(得分:3)

对于数字,++ii += 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前后增量功能。