2014-06-30 56 views
0

我知道i ++和++ i(如this)之間的區別,如果我想使用它們的新值。我在C編程語言(K & R)中看到很多例子,使用的表達式如s[i++] = c;。有時,我遇到的代碼(如下所示)讓我感到困惑,這種風格似乎被他們高度重視。正在使用i ++(或++ i)真的是一個好習慣嗎?

while (*string1++ = *string2++); //in c 

而在這post,喬恩'避免使用'這種風格。

所以我的問題是使用i ++(或++ i)像上面的代碼一個很好的做法?如果沒有,我應該在什麼情況下使用它(正當我不使用它的新閥門時)?

+2

它使您的代碼更具可讀性。 –

+2

這取決於您考慮的具體示例。你的例子很清楚。 – pablo1977

+0

@BryanChen你的意思是使用i ++是爲了使代碼更具可讀性? – Tony

回答

0

這似乎很大程度上是個人風格和情況的要求。

i+=1i=i+1相比,編寫i++更簡潔,它可以幫助您刪除不傳達算法基本事實的代碼行。

當然,喬恩斯基特是正確的(像往常一樣),它可以使你的代碼更難以理解:++ii++之間精神上區分是另一個週期你的大腦要經過了解發生了什麼事情。

有些情況下,代碼中的粒度更多是您想要的;有時候你不在乎。沒有任何硬性規定。

當然,話說回來,我個人建議不要使用i++++i作爲函數的參數(即foo(i++)),因爲如果你不小心,可以引入一些非常難以跟蹤的錯誤,或混合他們與其他運營商(即布賴恩陳的例子i++ + k++)。

2

就其本身而言,i ++對於增加變量的想法是一個明確的,習慣用語。它本身就是如此清楚。計算機語言是以這種習語(C++)命名的。

喬恩並不是說要避免「i ++」;他正在說要避免將其與其他會使事情複雜化的表述結合起來,其中增量操作是「副作用」。像:

arr2[++j] = arr[++i]; // now what the heck is going on? I have to stop and look. 

在這種情況下,它是更合理的避免它,我同意他。當你開始調整代碼,移動東西或添加邏輯時,增量可能會消失,移動,變得冗餘等等,並且通常更好的方法是單獨在一行上執行增量,或者在循環頭中執行增量。

關於++運算符的一個有趣的事情,除了它是一個天才的想法之外,前綴和後綴替代編碼不僅僅是「i = i + 1」,它們編碼左或右的額外評估可以這麼說。 (或者你可以把它看作前/後評估)。

所以++ i是功能:

i = i + 1; return i 

和我++是功能:

temp = i; i = i + 1; return temp 

這種差異會導致額外的 「麻煩」 通過隱藏的錯誤,並且你可以看到爲什麼,如果編譯器不優化生成的代碼,它們具有不同的性能分支。

相關問題