i++ 與 ++i 的主要區別有兩個:
**1、 i++ 返回原來的值,++i 返回加1後的值。
2、 i++ 不能作為左值,而++i 可以。**
毫無疑問大家都知道第一點(不清楚的看下下面的實現**就了然了),我們重點說下第二點。首先解釋下什麼是左值(以下兩段引用自中文維基百科『右值引用』詞條)。
左值是對應記憶體中有確定儲存位址的物件的表示式的值,而右值是所有不是左值的表示式的值。一般來說,左值是可以放到賦值符號左邊的變數。但
能否被賦值不是區分左值與右值的依據。比如,c++的const左值是不可賦值的;而作為臨時物件的右值可能允許被賦值。左值與右值的根本區別在於是否允許取位址&運算子獲得對應的記憶體位址。比如,
int i = 0;
int *p1 = &(++i); //正確
int *p2 = &(i++); //錯誤
++i = 1; //正確
i++ = 5; //錯誤
那麼為什麼『i++ 不能作為左值,而++i 可以』?看它們各自的實現就一目了然了:以下**來自部落格:為什麼(i++)不能做左值,而(++i)可以(
// 字首形式:
int& int::operator++() //這裡返回的是乙個引用形式,就是說函式返回值也可以作為乙個左值使用
//字尾形式:
const
intint::operator++(int) //函式返回值是乙個非左值型的,與字首形式的差別所在。
i和i 的區別
大家都應該知道i 和 i的區別,前者是先使用i的值,然後再增加1,而後者是先增加1然後再使用i的值。但是i 和 i那個更好呢?我們實現角度來看 前者是將i值加1後賦給i,然後返回i本身 而後者是先用個臨時變數儲存i值,然後將i值加1賦給i,然後返回臨時變數的值。內建資料型別他們的效率差不多,看他們的...
i 和 i的區別
當年上c 課的時候對於i 和 i的區別就稀里糊塗。後來沒注意也沒出過什麼問題。但是這個問題還是應該搞清楚。假如有乙個vector,值為 1,2,3,4,5,6,7 用以下程式輸出 i 0 while i 7 i 0 while i 7 cout beforei v i endl cout befor...
i 和 i的區別
很多朋友在學習基礎的時候很容易遇到過這個問題,i和i 到底有什麼區別?下面來詳細解釋一下。首先i 和 i單獨為一條語句時沒有任何區別 例如 int i 1 i 單獨為一條語句 system.out.println i i i 2 int i 1 i 單獨為一條語句 system.out.printl...