C++複習整理---i++和++i
理論上++i更快,實際與編譯器優化有關,通常幾乎無差別。
//i++實現程式碼為:
int operator++(int)
{
int temp = *this;
++*this;
return temp;
}//返回一個int型的物件本身
// ++i實現程式碼為:
int& operator++()
{
*this += 1;
return *this;
}//返回一個int型的物件引用
簡單從返回的值來說,i++返回的是i的值,而++i返回的是i+1的值。
從返回的東西來說,++i返回的是i的引用,i是什麼值反映出來就是什麼值。可以不停巢狀++(++i)
。而且可以(++i) = 5;
,就是把i的值改為5。可以&(++i)
取i的地址空間。而i++就不行,就會報錯,因為i++相當於只是返回一個值,沒有實體,就不能這樣做,也不能巢狀。
int i = 0;
cout<<++i<<endl<<++i<<endl; //2 2
cout<<++i<<endl<<i++<<endl; //4 2
cout<<i++<<endl<<i++<<endl; //5 4
cout<<i++<<endl<<++i<<endl; //7 8
首先是函式的入棧順序從右向左入棧的,計算順序也是從右往左計算的,不過都是計算完以後在進行的壓棧操作,所以輸出是按順序的,只是計算順序是反的:
第一行輸出:首先執行++i,返回值是i,這時i的值是1,再次執行++i,返回值是i,得到i=2,將i壓入棧中,此時i為2,也就是壓入2,2;因為++i返回的是引用,所以前一個的i是2.
第二行輸出:首先執行i++,返回值是原來的i,也就是2,再執行++i,返回值是i,依次將2,4壓入棧中得到輸出結果
第三行:首先執行i++,返回值是原來的4,再執行i++返回值是原來的5,依次將4,5壓入棧中得到輸出結果
第四行:首先執行++i,返回i,此時i為7,再執行i++,返回值是原來的7,此時i為9,依次將i,8也就是9,8壓入棧中,得到輸出結果。
理解的時候就是++i是把i壓入棧,i是什麼值就是什麼值。i++是把傳入時i的值壓入棧,是加之前的值,且不會改的。
相關文章
- C++中的i++和++i你真的理解嗎?C++
- 你真的懂 i++ 和 ++i 嗎?
- 關於java中的i++和++iJava
- 位元組碼指令分析 ++i 和 i++
- synchronized下的 i+=2 和 i++ i++執行結果居然不一樣synchronized
- 你真的瞭解 i++, ++i 和 i+++++i 以及 i+++i++ 嗎?
- i++引發的慘案
- jvm是如何執行i = i++ + ++i的,你知道嗎?JVM
- 關於 i=i++ 問題、入棧順序
- 好程式設計師web前端教程分享初學者搞懂i++和++i程式設計師Web前端
- Java中 i=i++ 問題底層原理解析Java
- 【課件整理複習】Hadoop-第7講 Hadoop的I/O操作Hadoop
- 一個關於 i++ 和 ++i 的面試題打趴了所有人面試題
- C/C++複習C++
- C++複習考點C++
- C++複習筆記C++筆記
- 【C++複習】棧-上篇C++
- 7.6-----複習C++C++
- 面試官又整新活,居然問我for迴圈用i++和++i哪個效率高?面試
- 美團一面問我i++跟++i的區別是什麼
- Java變數自增表示式 i = i++ 的底層邏輯(簡述)Java變數
- c++ I/OC++
- [c++] 繼承和多型整理二C++繼承多型
- C#自增運算子詳解:++i與i++的區別及應用場景C#
- C++期末複習資料 備考C++
- Byteman 讓 i++ 百分百執行緒不安全執行緒
- C++整理1C++
- C++整理2C++
- 複試題整理
- 【Java面試高頻】i++和++i的區別,單例模式的多種實現以及區別,類和例項初始化順序,不看血虧Java面試單例模式
- reduce()方法的學習和整理
- 停止 FutrueBuilder 的重複重新整理和執行UI
- C/C++期末考試複習---知識點+習題C++
- 【面試】I/O 複用面試
- C++:標準I/O流C++
- 資料庫基礎知識整理與複習總結資料庫
- c/c++面試整理C++面試
- C++刷題tricks整理C++