C++ 變數“前++”與“後++”的區別
阿新 • • 發佈:2018-11-28
問題描述
我們在使用迴圈遍歷容器時,經常會看到一個自增/自減的表示式,比如:i++、++i、--i、++i。我們在書本上比較常見的就是++i,那麼到底 i++ 與 ++i有什麼區別呢?
區別1
書本上解釋的表示式方式區別:i++是先取變數i,再將變數i值+1;而++i是先將變數i值+1,再取變數i。在迴圈遍歷容器變數時,這兩種方式的結果都是一樣的,但是,本質的效率上有很大的區別,下面介紹另一種效率區別。
區別2
我們使用STL(標準模板庫)中的一個例子來解釋。STL中的遍歷可以是以下兩種之一:
for(iterator it =begin(); it != end(); ++it)
或者
for(iterator it = begin(); it != end(); it++)
兩者的區別是什麼呢?並且
for(iterator it = begin(); it != end(); ++it)
{
return it->second;
}
for(iterator it = begin(); it != end(); it++)
{
return it->second;
}
兩者每一次返回的結果是否相同?
兩種方式iterator遍歷的次數是相同的,但在STL中效率不同,前++返回引用,後++返回一個臨時物件,因為iterator是類模板,使用 it++這種形式要返回一個無用的臨時物件,而it++是函式過載,所以編譯器無法對其進行優化,所以每遍歷一個元素,你就建立並銷燬了一個無用的臨時物件。C++的標準庫,還有符合標準C++的教材,除了特殊需要和對內建型別外,基本都是使用++it來進行元素遍歷的,不管是原始碼還是教材中都是如此。
使用者定義型別對操作符的過載應與內建操作符的行為相似,而且後自增/減往往是引用前自增/減來作為其實行的一個副本。
下面是標準庫原始碼:
總結
C++ 變數“前++”與“後++” 共有以上兩種區別,現在再使用++時應該就明白為什麼需要使用前++了吧。
參考
本文一部分參考其他博主的文章,原文連結:https://blog.csdn.net/yangxuan0261/article/details/50414855