在迴圈語句中,for i 0 i n i 和for i 0 i n i 有什麼區別?

時間 2021-05-31 05:23:51

1樓:Yi Zhao

加一段timer不就知道了麼,我只記得老師說不管是++i還是i++都比i=i+1快,i++在n十分大的時候慢於++i,原理早忘了(或許應該檢視下彙編)

2樓:徐辰

在C++裡,假如i是int,那麼沒有任何不同,無論開不開優化,你沒有使用自增後的i值,編譯器根本就不會「複製」乙個i。

如果i是個自定義型別,又自定義了字首和字尾++操作符,那自然是不一樣的。

3樓:

本來,這樣的問題我不會回答,心裡說「編譯器君掩面不語」後跳到下乙個問題。

但是衝著你的第一句話:「(這個問題估計1萬個程式設計師也不到1個能真正領悟)」。我忍不住進來跟你說,同學,你一定要成為乙個萬里挑一的程式設計師啊。

4樓:Gomo Psivarh

我想說的是現在已經是2023年了,編譯器都發展了幾十年了連這點優化都做不到也好意思拿得出來?程式優化的重點應該放在專案的效能瓶頸上,而不是摳這種幾乎無意義的細枝末節。

再說了,如果你非覺得編譯器不可信非要寫成++i,那我可以告訴你把for(int i=0; i

寫成for(int i=n-1; i>=0; --i)會更快(彙編可以少乙個CMP指令,當然主流的編譯器基本都會自動幫你做這樣的優化)

你會把程式中所有迴圈改成下面那種嗎?

5樓:

按C來說

i++把i增加1,返回i增加前的值

至於是先計算整個表示式還是先增加i應該是未定義的++i先把i加1,返回i的引用

在for裡i++和++i由於返回值沒有被使用,因此會被優化成一樣的結果

6樓:顥凡

for迴圈中不好說明,不妨假設有這樣乙個表示式:

int i = 3;

int k;

k = ++i1

k = i2

前置遞增運算子:物件遞增加一再使用

即: /* #1等價於 */

i = i+1; //i的值為4

k = i; //k 的值為4

後置遞增運算子:建立乙個臨時物件,將臨時物件替換呼叫原變數的位置,原變數+1

即:/* #2等價於 */

k = int(i); //int(i) 是乙個臨時物件,值為4i = i+1; //i 的值為5

也就是說後置遞增相比前置遞增會建立乙個臨時物件int(i),使用臨時物件賦值給k,所以後置遞增會比前置遞增慢那麼一丟丟。

7樓:

習慣用++i,但我相信編譯器對此的優化,不會在意它的效能。

對於a = i++;那段,我不大清楚你的問題,不知道下面這樣說能不能幫你理解。

你說的「等號右邊的變數賦值給左邊的變數」,那既然是「值」,這個值也就可以來自於另外乙個變數(假設是t),t儲存了i自增前的值,然後把t返回給了左邊進行賦值操作。

把++理解成下面這個方法。

int jiajia(int &i)

a = i++;就變成了a = jiajia(i);

Python迴圈語句for i in range 這個不大清楚,怎麼回事吖?

王王韋王奇 要理解好python的for語句,就需要先知道列表這個資料型別。列表其實很簡單,就是乙個中括號裡面有一大堆資料,比如classes Chinese English Math 當你想對這個列表中的每乙個資料進行處理的時候,就需要使用for語句了 for class in classes p...

sql語句中啥什麼要用到group by?group by什麼根據什麼分組的?

小跑的人 在MYSQL中使用GROUP BY對錶中的資料進行分組時,GROUP BY X意思是將所有具有相同X字段值的記錄放到乙個分組裡,GROUP BY X,Y意思是將所有具有相同X字段值和Y字段值的記錄放到乙個分組裡。X,Y的排列組合 chengzhang GROUP BY 語句根據乙個或多個欄...

如何實現MyBatis僅更新SQL語句中指定的字段?

按照 janwen提供的思路,我找到了解決辦法 資料表 CREATE TABLE qai entity id CHAR 10 NOT NULL,value INT NOT NULL DEFAULT 0,create time TIMESTAMP NOT NULL,PRIMARY KEY id 將以上...