[英]Increment ++i, i++ and i+=1
我是C ++的初學者。 我的理解是: -
i ++首先執行,然后遞增,++ i先遞增,然后執行,i + = 1遞增1,然后執行。 但是在FOR循環中:
for (i=0;i<10;i++)
for (i=0;i<10;++i)
上面這兩個循環確實沒有區別。
這是另一個計算從1到100的所有整數的總和:
int i=1, sum=0;
while (i<=100)
{
sum+=i;
i++; //i+=1; ++i;
}
cout<<sum<<" "<<i<<endl;
return 0;
但是如果我用i + = 1或++ i替換i ++,它們都會返回5050和101的總和。所以我真的看不出它們有什么不同。
那么有人可以向我解釋這個嗎? 編程中哪一個最常用? 謝謝!!
你是對的。 在您的示例中沒有區別。
但這里有:
int i = 0;
cout << i++ << endl; //prints 0
cout << i << endl; //prints 1
VS
int i = 0;
cout << ++i << endl; //prints 1
cout << i << endl; //prints 1
編程中哪一個最常用?
大多數情況下, ++
是語句中唯一的操作(FYI, for
循環有三個語句)。
如果不是,那么它可能很重要,你將使用任何一個給你正確的行為。
FYI
一些開發人員認為,如果pre和postfix運算符應該總是單獨使用(不是大語句的一部分)。 它們可能導致令人困惑的代碼,甚至是未定義的行為。
例如,
int i = 0;
cout << i++ + i++ << endl;
有未定義的行為。
那么有人可以向我解釋這個嗎?
什么i++
的作用是返回的當前值i
,然后由一個增加它,並++i
第一次增加i
的1
,然后返回的值i
。
看看這個,例如:
i = 5;
j = 5;
res = i++; //res = 5, but i=6
res = ++j; //res = 6 and j=6
編程中哪一個最常用?
兩者都可以根據您的需要使用,也可以根據您的需要使用。
還有一點需要注意: ++i
是l值,但i++
不是。 詳情請見此處
你的分析是正確的。 i++
返回的值i
,然后增加,而++i
將遞增的價值i
,然后返回新值。 i += 1
將與++i
相同。 它們在實際代碼中的使用位置差異主要是情境; 關於每個人最常使用或有幫助的地方,沒有具體的答案。 這一切都取決於你想做什么。
這是一個人為的例子,一次使用后增量( i++
形式)可能有用:
// Return the length of a string, including the null byte
int stringLength(char str[])
{
int length = 0;
while (str[length++] != 0);
return length;
}
如果要返回沒有空字節的長度,可以使用++i
表單稍微修改上面的示例:
// Return the length of a string, without the null byte
int stringLength(char str[])
{
int length = -1;
while (str[++length] != 0);
return length;
}
至於i += 1
,我認為我沒有做過那么多,因為你可以使用預增量或后增量。 我通常只將復合賦值運算符用於1以外的值。
我想如果您想象for循環如何工作,您可以理解手頭的問題。
for循環
initialization --> i = 0
<check condition> --> i<10? ------->--------------------
| | |
^ |yes(i.e condition not met) |no(i.e condition met)
| V V
| --------------
| |body of loop|
| --------------
| |
| V
-------<------------increment i (**) exit for loop
** increment i
表示i++
或++i
i++
可以替換為:
int temp = i;
i = i + 1;
temp
在這里沒用,所以編譯器會將它優化為inc i
指令。 即使它沒有那么temp
也只是浪費空間而已。
++我可以被替換
i = i + 1;
int temp = i;
再次temp不是必需的,所以編譯器只需用inc i
指令替換它。
如果你看到兩條指令都是相同的,因為它們沒有被分配給任何東西。 只有i
受到增量的影響。 所以兩者基本相同。 如果i
是內置類型,這是真的。
你看到增量指令放在循環體之后? 你現在能看到這幾乎與你展示的while循環相似嗎?
以這種方式思考循環總是很好的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.