我會通過對性能(提示:沒有區別,檢查產生的IR或組裝的證明),然而還有在語法和維護兩個重要的區別。
語法
i
所述變量的範圍是不同的。在for
的情況下,i
只能在for
標頭和機體內訪問,而在while
的情況下,它在循環後可用。作爲一般規則,最好有更嚴格的範圍,更少的變量正在進行中的意味着編碼時不必擔心的上下文。
維護
的for
循環有分組的所有操作併攏迭代整齊的優勢,這樣他們就可以一次性檢查等檢查。
而且,存在引入continue
語句時一個重要的不同:
for(int i = 0; i != 10; ++i) {
if (array[i] == nullptr) { continue; }
// act on it
}
int i = 0;
while (i != 10) {
if (array[i] == nullptr) { continue; }
// act on it
++i;
}
在while
情況下,引進continue
創造了一個錯誤:無限循環,當計數器不再執行。
影響
for
循環是更具可讀性和全能更好地爲定期迭代模式。更妙的是,在C++ 11的範圍內,對聲明:
for (Item const& item : collection) {
}
其中迭代完全由編譯器的照顧,所以你一定不要亂了! (它使for_each
算法有些毫無意義......和形式開始撤退,我們可以希望老)
通過corrolary:while
循環應在代碼審查保留不規則的迭代模式,這樣,他們將吸引優撫從未來的維護者通過突出顯示的不規範的情況。
一個編譯器設置爲opmizing的速度可能只是發出'print(i)'五次,並完全消除循環。在這兩種情況下。 – Joey 2012-02-17 10:58:14
在現實世界中,我們關注代碼的可讀性,並根據它選擇「for」或「while」。編譯器會優化差異。或者現代機器上的差別很小,因此可以忽略不計。使用那個讓你的生活更輕鬆的,而不是電腦的「生活」。 – Bazzz 2012-02-17 10:59:58
如果沒有設置優化,然後? – wali 2012-02-17 11:00:14