関数を永久に実行させることができるストリームはどのようなものですか?
そのようなストリームは存在しますか?
標準入力。
ifstream("/dev/random") ifstream("/dev/zero")
ストリームでエラーが発生すると、情報の返し/受け入れが停止します。関数がストリームから何かが出てくるのを待っている場合、関数は永久にスピンします。
if ( cin )
(ストリームを にキャスト) を使用bool
して、エラー状態をテストします。または、プログラムまたはストリームの初期化時に呼び出しcin.exceptions( ios::badbit )
て、エラー状態が静かにスピンするのではなく例外をスローするようにします。
プログラムがそのようなエラーから回復できる場合は、呼び出しcin.clear()
(または任意のストリーム) に続いてcin.ignore()
、問題のある入力を削除します。