C++中的i++和++i

2017-10-14  本文已影响0人  nethanhan

前置操作符和后置操作符

首先来思考一个问题:

    //下面的代码有没有区别?为什么?
    
    i++;  // i的值作为返回值,i 自增 1
    
    ++i;  // i自增 1, i 的值作为返回值

如果从原生语义上讲,不一样,但是是在单条语句内,运算结果都一样。并且如果在单条语句内,编译器会进行优化,有的是作为原生语义来进行编译,有的是直接作为同一意思来进行的。

重载操作符


那这里再深入一下,讨论另外一个问题:

++ 操作符可以重载吗?
如何区分前置++ 和 后置++?

答案是可以重载的,不光是基本类型可以重载,类类型也可以重载。

例如:

#include <iostream>
#include <string>

using namespace std;

class Test
{
    int mValue;
public:
    Test(int i)
    {
        mValue = i;
    }
    
    int value()
    {
        return mValue;
    }
    
    // 重载前置 ++ 操作符,不需要参数
    Test& operator ++ ()
    {
        ++mValue;
        
        return *this;
    }
    
    //重载后置 ++操作符,需要一个int类型的参数
    Test operator ++ (int)
    {
        Test ret(mValue);
        
        mValue++;
        
        return ret;
    }
};

int main()
{
    Test t(0);
    
    //这里通过重载操作符,直接可以实现类类型的自加
    t++;
    
    ++t;
    
    return 0;
}

看完代码,其实也可以再次回答刚开始的问题了:

注意


看完 ++ 操作符的重载以后,其实也可以推出 -- 操作符和 ++ 操作符的重载规则是一样的,所有适用于 ++ 操作符的规则和特性也同样适用于 -- 操作符。

小结


上一篇 下一篇

猜你喜欢

热点阅读