i++ less efficient than ++i, how to show this?

前端 未结 9 1846
暖寄归人
暖寄归人 2020-12-03 14:30

I am trying to show by example that the prefix increment is more efficient than the postfix increment.

In theory this makes sense: i++ needs to be able to return the

9条回答
  •  隐瞒了意图╮
    2020-12-03 14:57

    This code and its comments should demonstrate the differences between the two.

    class a {
        int index;
        some_ridiculously_big_type big;
    
        //etc...
    
    };
    
    // prefix ++a
    void operator++ (a& _a) {
        ++_a.index
    }
    
    // postfix a++
    void operator++ (a& _a, int b) {
        _a.index++;
    }
    
    // now the program
    int main (void) {
        a my_a;
    
        // prefix:
        // 1. updates my_a.index
        // 2. copies my_a.index to b
        int b = (++my_a).index; 
    
        // postfix
        // 1. creates a copy of my_a, including the *big* member.
        // 2. updates my_a.index
        // 3. copies index out of the **copy** of my_a that was created in step 1
        int c = (my_a++).index; 
    }
    

    You can see that the postfix has an extra step (step 1) which involves creating a copy of the object. This has both implications for both memory consumption and runtime. That is why prefix is more efficient that postfix for non-basic types.

    Depending on some_ridiculously_big_type and also on whatever you do with the result of the incrememt, you'll be able to see the difference either with or without optimizations.

提交回复
热议问题