C 再學習系列 前置 與後置

2021-04-28 01:37:05 字數 582 閱讀 6804

前置++:type operator++();

後置++:const type operator++(int );

為了編譯器區分前置和後置++,c++規定字尾形式有乙個int型別引數 ,當函式被呼叫時,編譯器傳遞乙個0做為int引數的值給該函式。不這樣規定,無法區分,因為都僅以自身物件為入參。

下面是乙個簡單的例子:

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

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

前置僅僅是對自身進行運算,並將自身返回,這樣外面可以直接對這個返回物件再進行操作 ,如(++it)->function()。

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

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

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

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

過載 前置 與後置

過載 前置 與後置 不同於普通的雙目運算子 自增自減運算子 在過載的時候需要額外留意區分是前置式還是後置式。現行的處理方法是,作為成員函式的 前置 不接受任何引數,而後置 接受乙個int型別的引數,儘管沒什麼實際用途,但是卻為編譯器確定過載物件提供了幫助。除了區分的時候需要注意,他們的行為也是有所區...

C 前置操作與後置操作

最近在看c primer,看到書的中間部分,發現自己對先前的前置與後置操作理解的還不是很深刻。剛谷歌搜了一下,發現大家看的最多的那個鏈結講的也不是很清楚,至少在我這個小白看來,不是很清楚。這邊為自己和大家理一理思路吧。我們以例子來說明 片段一 int main 以上這段 的中的x,j的輸出結果是一樣...

c 中前置 與後置 的區別

自增 與自減 是我們經常會用到的運算子,然而很多情況下我們並不注意要用前置還是後置。本文就自增 討論前置 與後置 的不同點,兩者的用途 自減運算子同理 一般情況下在while迴圈中我們會有如下用法 while 此處無論是前置自增還是後置自增,效果都類似於 i 1,因為這是單獨的運算,沒有與其他的表示...