while(true)
顯然可以創建一個「無限」循環,這意味着在進程中沒有任何內部能夠導致循環終止。操作系統可能會決定(例如,在CPU使用配額用盡之後)或被詢問(例如UNIX/Linux上的kill -HUP processid
)以終止該過程。
這是值得考慮含有無限循環之間的差:(?I/O)
- 阻止請求,如等待新的網絡的客戶端的連接或數據或鍵盤輸入,或者甚至只是一個特定的時間間隔流逝,然後定期有限量或I/O相關的處理,和
- 無阻塞支化和數據處理的指令,僅僅旋轉圍繞燃燒CPU和/或抖動CPU /存儲器高速緩存(例如
x += array[random(array.size())];
)
在某些情況下,前一種情況實際上可能是故意使用的,例如不需要執行任何有序關閉的服務器進程,因此可以讓操作系統在不運行任何後循環代碼的情況下將其關閉,但第二種情況是通常是一個編程錯誤:當通過循環控制中斷循環的處理過程中出現退出條件或錯誤時,您往往只有這樣的一種方式while(true)
。例如,可能有一個if (condition) break;
,或者在發生錯誤時會拋出異常的東西。這可能並不明顯 - 例如,如果可能是被調用的某個函數的例外 - 甚至可以將標準iostream的函數設置爲轉換失敗或EOF - 而不是循環內源代碼中可見的語句。
值得一提的是,許多其他的事情可以創建無限循環太 - 例如while (a < b)
可能永遠持續下去,如果沒有什麼條件下a
可能成爲>= b
。所以,編程的一般方面是你必須考慮你的循環如何退出,而不是語言安全性方面的問題。對於輸入,這是正常的做類似的:
while (std::cin >> my_int)
{
// can use my_int...
}
// failed to convert next input from stdin to an int and/or hit EOF
沒有代碼,沒有答案。這個問題可能與「while(true)」完全無關。 –
同意。而(真正的)真的不應該改變任何東西,除非它重複一遍又一遍地重複代碼;也許輸入的數據類型錯誤會導致您閱讀數據的方式出現問題。 –
您必須驗證輸入,即對於計算器,您必須確保它是數字。除此之外,有時無限循環可能是有用的。 –