i 和 i的區別

2021-07-30 05:49:51 字數 838 閱讀 9380

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...