前置 為什麼比後置 效率高

2021-06-13 16:55:25 字數 733 閱讀 8930

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

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

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

下面是乙個簡單的例子:

class  cint  ;

cint  &  cint:: operator ++ ( )  //  前置的是沒有引數的,並且返回引用

const  cint cint::opeartor ++ (int)  //  後置的有乙個匿名引數,並且返回const值

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

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

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

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

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

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

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

前置 為什麼比後置 效率高

為了編譯器區分前置和後置 c 規定字尾形式有乙個int型別引數 當函式被呼叫時,編譯器傳遞乙個0做為int引數的值給該函式。不這樣規定,無法區分,因為都僅以自身物件為入參。下面是乙個簡單的例子 class cint cint cint operator 前置的是沒有引數的,並且返回引用 const ...

前置 為什麼比後置 效率高

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

為什麼前置 比後置 的效率高

僅對類型別而言,請看 class a a const a a a a operator 前置版本prefix const a operator int 後置版本postfix private int m i int tmain int argc,tchar argv 輸出 a的建構函式 a的拷貝建構...