什么样的流可以导致功能永远运行?
这样的流存在吗?
标准输入。
ifstream("/dev/random") ifstream("/dev/zero")
如果流遇到错误,它将停止返回/接受信息。如果您的函数正在等待从流中出来的东西,它将永远旋转。
使用if ( cin )
(将流转换为bool
)来测试错误情况。或者,cin.exceptions( ios::badbit )
在程序或流初始化时调用,以便错误条件引发异常,而不是安静地旋转。
如果程序能够从此类错误中恢复,则调用cin.clear()
(或任何流)后跟以删除有问题的输入。cin.ignore()