轉:http://developer.51cto.com/art/201107/275959.htmide
剛剛接觸C++的新手同窗們,每每會被前置++和後置++搞混。這個概念在C++中仍是很重要的,把前置++和後置++弄明白是必須的。函數
下面就給你們介紹前置++和後置++的區別。this
前置++: type operator++(); 後置++: const type operator++(int );spa
爲了編譯器區分前置和後置++,C++規定後綴形式有一個int類型參數 ,當函數被調用時,編譯器傳遞一個0作爲int參數的值給該函數。不這樣規定,沒法區分,由於都僅以自身對象爲入參。 下code
面是一個簡單的例子:htm
class CInt { private : int m_value;// } ; CInt & CInt:: operator ++ ( ) // 前置的是沒有參數的,而且返回引用 { this -> m_value += 1 ; return * this ; } const CInt CInt::peartor ++ (Int) // 後置的有一個匿名參數,而且返回const值 { CInt old = * this ; ++ ( * this ); return old; }
上面的實現解釋了一個關鍵問題:前置比後置效率高 ,後置須要構造臨時對象並返回。 那爲何前置和後置返回參數不一樣呢? 前置僅僅是對自身進行運算,並將自身返回,這樣外面能夠直接對這個返回對象再進行操做 ,如 (++it)->function() 後置因其返回的不是原來的對象,此時再進行額外操做,改變的是臨時對象的狀態,並不異義 ,容易誤解。 那爲何不返回const &呢?由於不能這麼作,返回引用將無效,臨時對象已經不存在了。 因此後置返回const 對象即限制對此臨時對象進行誤操做,並顯式地告訴調用者此對象僅爲原對象的副本。 另外還有一個緣由:內置int類型並不支持 i++++ .而若是後置++返回一個可修改的副本將與內置int類型行爲不一樣。故應該禁止使用者對返回值進行修改。對象