i = i + 1和++ i之间的速度比较

时间:2015-07-03 01:25:14

标签: c++ c++11 increment

对于C ++ 11,* 39i = i + 1快吗? ++i ++i比类i++快,但不适用于简单类型。 i = i + 1和其他两个之间是否有类似的比较?
谢谢!

编辑1:我使用g ++,但我也很高兴知道这对其他编译器有何影响。
编辑2:此问题与I hear不同,因为它专门询问i = i + 1,而不是仅讨论++ii++之间的区别。

编辑3:(TonyD - 由QuantumFool编辑)问题的i = i + 1方面是this one

的副本

2 个答案:

答案 0 :(得分:4)

除了您使用的编译器外,它还取决于您使用的优化设置。如果您想知道,请将其反汇编以查看特定编译器+优化设置的编译结果。

但至少有一些事情是真实的:

  1. i++不会慢于i = i+1
  2. 如果您只进行增量,
  3. ++i将不会慢于i++
  4. 如果可能,即使是简单类型,也总是首选++i。不是因为表现,而是为了建立一个好的做法,这样你就不需要在对象++上进行双重思考。

答案 1 :(得分:0)

  1. 如果类型不是类,如int等,它们几乎相同
  2. 如果类型是class,++ i比i ++快,因为++ i返回lvalue,i ++返回rvalue;
  3.   class A{
            private:
               int i;
            public:
               A( int k =0): i(k){}
               A operator++(){  // i++
                  A temp=*this;  // need create a new object
                  i++;
                  return temp;
            }
               A & operator++(int){ // ++i
                   i++;
                   return *this;
            }
            };