程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++入門之談前置++與後置++的區別

C++入門之談前置++與後置++的區別

編輯:C++入門知識

剛剛接觸C++的新手同學們,往往會被前置++和後置++搞混。這個概念在C++中還是很重要的,把前置++和後置++弄明白是必須的。下面就給大家介紹前置++和後置++的區別。

前置++:

  1. type operator++); 

後置++:

  1. const type operator++int ); 

為了編譯器區分前置和後置++,C++規定後綴形式有一個int類型參數 ,當函數被調用時,編譯器傳遞一個0做為int參數的值給該函數。不這樣規定,無法區分,因為都僅以自身對象為入參。

下面是一個簡單的例子:

  1. class CInt {  
  2. private :  
  3. int m_value;  
  4. //  
  5. } ;  
  6. CInt & CInt:: operator ++ ( ) // 前置的是沒有參數的,並且返回引用  
  7. {  
  8. this -> m_value += 1 ;  
  9. return * this ;  
  10. }  
  11. const CInt CInt::peartor ++ (Int) // 後置的有一個匿名參數,並且返回const值  
  12. {  
  13. CInt old = * this ;  
  14. ++ ( * this );  
  15. return old;  

上面的實現解釋了一個關鍵問題:前置比後置效率高 ,後置需要構造臨時對象並返回。

那為什麼前置和後置返回參數不同呢?

前置僅僅是對自身進行運算,並將自身返回,這樣外面可以直接對這個返回對象再進行操作 ,如

  1. ++it)->function) 

後置因其返回的不是原來的對象,此時再進行額外操作,改變的是臨時對象的狀態,並不異義 ,容易誤解。

那為什麼不返回const &呢?因為不能這麼做,返回引用將無效,臨時對象已經不存在了。

所以後置返回const 對象即限制對此臨時對象進行誤操作,並顯式地告訴調用者此對象僅為原對象的副本。

另外還有一個原因:內置int類型並不支持 i++++ .而如果後置++返回一個可修改的副本將與內置int類型行為不同。故應該禁止使用者對返回值進行修改。

希望通過以上內容的介紹,能夠幫助到你。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved