牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

前置++/--和后置++/--

对此一直理解不深,今日偶然之间发现自己根本没有理解他们.
今天我发现:
 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;
}

看到这个算符重载的代码就很明白了.
后置++返回的是传入的参数,而前置传入的是引用,自然返回的也是引用,也就只能是改变的值.

posted on 2007-03-29 17:38 杨粼波 阅读(416) 评论(2)  编辑 收藏 引用

评论

# re: 前置++/--和后置++/--[未登录] 2007-03-30 08:57 thinkinnight

一个是先计算再加,一个是加了再计算,不带计算的话,结果是一样的,不过看了实现之后,的确理解更深了些。看来是返回值的不同,如果有计算的话,是使用的返回值。  回复  更多评论   

# re: 前置++/--和后置++/-- 2007-03-30 09:08 随意

之所以前置效率高,因为传入的是引用.
而后置还要建立临时变量....  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理