std :: ftsream的成员函数bad()用于检查

时间:2012-10-03 20:10:57

标签: c++

我知道我可以用操作员检查成功的文件打开!和成员函数std :: fstream class的fail()。

但是我可以为此目的使用成员函数bad()吗?是否符合标准?

3 个答案:

答案 0 :(得分:2)

ios::operator!ios::bad不可互换。 operator!检查是否有任何错误(与ios::fail相同),而ios::bad仅检查不可恢复的错误。

请参阅各自的文档herehere

您需要检查的内容取决于您的使用案例,您需要了解其含义。

答案 1 :(得分:1)

函数bad()为“不可恢复的错误”产生true - 无论这意味着什么。基本上,只要某些内容因某种形式的格式错误而导致其他原因失败,就会设置bad()。有趣的是,当文件缓冲区的open()时,各种文件流类std::ofstream的{​​{1}}函数(std::ifstreamstd::fstreamstd::ios_base::failbit)都设置为open()失败了!也就是说,您无法使用stream.bad()来测试open()是否失败。您可以使用stream.fail()。就个人而言,我不会打扰并使用转换为bool

std::ofstream out("file");
if (out) {
    process();
}
else {
    report_error();
}

答案 2 :(得分:-1)

是的,你可以,ios::bad()返回boolean!只会否定boolean(即true - > {{1反之亦然)。

这是否是你打算要做的事情是一个不同的问题。 false检查流的完整性是否丢失,而不是打开失败。

相关问题