C++入門(mén)之談前置++與后置++的區(qū)別
剛剛接觸C++的新手同學(xué)們,往往會(huì)被前置++和后置++搞混。這個(gè)概念在C++中還是很重要的,把前置++和后置++弄明白是必須的。下面就給大家介紹前置++和后置++的區(qū)別。
前置++:
- type operator++();
后置++:
- const type operator++(int );
為了編譯器區(qū)分前置和后置++,C++規(guī)定后綴形式有一個(gè)int類(lèi)型參數(shù) ,當(dāng)函數(shù)被調(diào)用時(shí),編譯器傳遞一個(gè)0做為int參數(shù)的值給該函數(shù)。不這樣規(guī)定,無(wú)法區(qū)分,因?yàn)槎純H以自身對(duì)象為入?yún)ⅰ?/p>
下面是一個(gè)簡(jiǎn)單的例子:
- class CInt {
- private :
- int m_value;
- //
- } ;
- CInt & CInt:: operator ++ ( ) // 前置的是沒(méi)有參數(shù)的,并且返回引用
- {
- this -> m_value += 1 ;
- return * this ;
- }
- const CInt CInt::peartor ++ (Int) // 后置的有一個(gè)匿名參數(shù),并且返回const值
- {
- CInt old = * this ;
- ++ ( * this );
- return old;
- }
上面的實(shí)現(xiàn)解釋了一個(gè)關(guān)鍵問(wèn)題:前置比后置效率高 ,后置需要構(gòu)造臨時(shí)對(duì)象并返回。
那為什么前置和后置返回參數(shù)不同呢?
前置僅僅是對(duì)自身進(jìn)行運(yùn)算,并將自身返回,這樣外面可以直接對(duì)這個(gè)返回對(duì)象再進(jìn)行操作 ,如
- (++it)->function()
后置因其返回的不是原來(lái)的對(duì)象,此時(shí)再進(jìn)行額外操作,改變的是臨時(shí)對(duì)象的狀態(tài),并不異義 ,容易誤解。
那為什么不返回const &呢?因?yàn)椴荒苓@么做,返回引用將無(wú)效,臨時(shí)對(duì)象已經(jīng)不存在了。
所以后置返回const 對(duì)象即限制對(duì)此臨時(shí)對(duì)象進(jìn)行誤操作,并顯式地告訴調(diào)用者此對(duì)象僅為原對(duì)象的副本。
另外還有一個(gè)原因:內(nèi)置int類(lèi)型并不支持 i++++ .而如果后置++返回一個(gè)可修改的副本將與內(nèi)置int類(lèi)型行為不同。故應(yīng)該禁止使用者對(duì)返回值進(jìn)行修改。
希望通過(guò)以上內(nèi)容的介紹,能夠幫助到你。