我們在使用迴圈遍歷容器時,經常會看到乙個自增/自減的表示式,比如:i++、++i、--i、++i。我們在書本上比較常見的就是++i,那麼到底 i++ 與 ++i有什麼區別呢?
書本上解釋的表示式方式區別:i++是先取變數i,再將變數i值+1;而++i是先將變數i值+1,再取變數i。在迴圈遍歷容器變數時,這兩種方式的結果都是一樣的,但是,本質的效率上有很大的區別,下面介紹另一種效率區別。
我們使用stl(標準模板庫)中的乙個例子來解釋。stl中的遍歷可以是以下兩種之一:
for(iterator it =begin(); it != end(); ++it)
或者
for(iterator it = begin(); it != end(); it++)
兩者的區別是什麼呢?並且
for(iterator it = begin(); it != end(); ++it)
for(iterator it = begin(); it != end(); it++)
兩者每一次返回的結果是否相同?
兩種方式iterator遍歷的次數是相同的,但在stl中效率不同,前++返回引用,後++返回乙個臨時物件,因為iterator是類模板,使用 it++這種形式要返回乙個無用的臨時物件,而it++是函式過載,所以編譯器無法對其進行優化,所以每遍歷乙個元素,你就建立並銷毀了乙個無用的臨時物件。c++的標準庫,還有符合標準c++的教材,除了特殊需要和對內建型別外,基本都是使用++it來進行元素遍歷的,不管是源**還是教材中都是如此。
使用者定義型別對操作符的過載應與內建操作符的行為相似,而且後自增/減往往是引用前自增/減來作為其實行的乙個副本。
下面是標準庫原始碼:
c++ 變數「前++」與「後++」 共有以上兩種區別,現在再使用++時應該就明白為什麼需要使用前++了吧。
關於前 和後 的區別
關於前 和後 的區別,其實 很多人都清楚,比如 你知道i 是先用i,然後在讓i 1,然後 i是先對i 1,然後在去使用i。好了,這就是他們簡單的區別了,但是 實際上,i 呼叫了 i。說了這麼多i 和 i,我想你都應該頭暈了,給乙個例子吧 include class a a operator int ...
const在函式前與函式後的區別
const 的一些強大的功能在於它在函式宣告中的應用。在乙個函式宣告中,const 可以修飾函式的返回值,或某個引數 對於成員函式,還可以修飾是整個函式。有如下幾種情況,以下會逐漸的說明用法 a operator const a a void fun0 const a a void fun1 con...
C 常量與變數的區別
程式設計師面試或筆試,一般都會考到常量與變數的區別。1.常量的值不可以修改,任何嘗試修改常量的操作都會導致編譯錯誤。而變數可以通過賦值來改變。2.常量定義後就不可修改,所以常量在定義時就必須初始化。變數可以定義時暫時不進行初始化。常量初始化的時候必須直接賦值。const char a t corre...