while(true)
明らかに「無限」ループを作成できます。これは、ループを終了させることができるプロセスの内部に何もないことを意味します。オペレーティングシステムが(CPU使用率のクォータを使い果たした後などkill -HUP processid
)プロセスを終了するように決定したり、(UNIX / Linuxなどで)要求されたりする可能性はあります。
以下を含む無限ループの違いを検討する価値があります。
- 新しいネットワーククライアント接続またはデータまたはキーボード入力を待つ、あるいは特定の間隔が経過するのを待つなど、(I / O?)要求をブロックし、その後、有限量の定期的またはI/O関連の処理を行います。
- CPUの書き込みやCPU/メモリキャッシュのスラッシングを回避するだけの非ブロッキング分岐およびデータ処理命令(例
x += array[random(array.size())];
)
前者のケースは、サーバープロセスが正常にシャットダウンする必要がないため、ループ後のコードを実行せずにOSをシャットダウンできる場合など、実際には意図的に使用される場合がありますが、通常は2番目のケースです。プログラミングエラー:while(true)
ループによって制御される処理中に終了条件またはエラーが発生してループを中断する方法がある場合にのみ、このようなエラーが発生する傾向があります。たとえばif (condition) break;
、エラーが発生したときに例外をスローする、などが存在する可能性があります。throw
これは、ループ内のソースコードに表示されるステートメントではなく、たとえば、呼び出された関数の例外である場合でも、標準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