对此一直理解不深,今日偶然之间发现自己根本没有理解他们.
今天我发现:
cout<<a++<<endl;
cout<<++a<<endl;
的值不同,a++返回的是原值,++a返回的是递加后的值.
我不禁冒了冷汗,写了这么多代码,居然会不明白这么简单的东西,还好之前代码没有出现问题.
我为此懊恼不已.细节往往是最重要的,诚然如此啊.
带着一个问题:为什么要分前置和后置?
大家都知道前置比后置要效率高,难道就只是为了效率而存在,显然不会,如果这样,后置就没有存在的任何理由.
class CInt{
private:
int m_value;
//
};
CInt & CInt::operator++( ) // 前置的是没有参数的,并且返回引用
{
this->m_value+=1;
return * this;
}
const CInt CInt::opeartor++(CInt) // 后置的有一个匿名参数,并且返回const值
{
CInt old = *this;
++(*this);
return old;
}
看到这个算符重载的代码就很明白了.
后置++返回的是传入的参数,而前置传入的是引用,自然返回的也是引用,也就只能是改变的值.