欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

++i 与 i++

程序员文章站 2024-02-09 17:25:10
...

 

++i 与 i++ 的本质区别是


++i 操作除 i 之外不涉及新的(隐含的)操作数,而 i++ 则在 i 之外还涉及另一个新的(隐含的)操作数。这个隐含的参数是为了重载区别两个操作符。


 

效率差别:

如果只是对内建数据类型(如int),两者的差别很小,基本上没有,这个可以从汇编代码上看出来。

但是如果对于C++里的类,那++i和i++两个是运算符重载,它们的区别就比较明显了: 
i++和++i的 最重要的区别大家都知道就是 +1和返回值的顺序, 但,两这还有一个区别(在C++中)就是i++在实现的时候,产生了一个local object。

 

实例


在C++中,简单类型的i++和++i与C相同。但由于在C++中可以重载运算符,所以在实现新的类型对象时重载i++和++i操作与C不同。
 


#include <iostream>
using namespce std;

class Test
{

public:

    // ++i, 返回引用
    Test& operator++()
    {
        *this + = 1;              // 先加1
        return *this;             // 返回加1后的值
    }
    
    // i++, 返回值
    Test operator++(int)
    {
        Test old = *this;       // 保存旧值
        ++(*this);              // 再加1
        return old;
    }
    

};

 

 

从上面的++i与i++的实现看出,在C++中,对于非内建类型来说,前自增运算(++i)返回的是对象的引用,而后自增运算返回的是对象,返回对象将造成成拷贝构造函数更多的调用,所以++i的效率要高于i++。但是对于内建类型,i++与++i的效率几乎没有区别(因为内建类型没有拷贝构造函数)。于此类似的是i--和--i。(注:因为后自增运算返回的是const型对象因此后自增运算不能做左值)。

 

 

 

 

 

 

 

 

 

 

相关标签: i