成员函数 bad() 的 std::ftsream 用于检查
member function bad() of std::ftsream for checking
我知道我可以用运算符检查文件打开成功!和std::fstream类的成员函数fail()。
但是我可以为此目的使用成员函数 bad() 吗?是否符合标准?
ios::operator!
和ios::bad
不可互换。 operator!
检查是否有任何错误(与ios::fail
相同),而ios::bad
只检查不可恢复的错误。
在此处和此处查看其各自的文档。
您需要检查的内容实际上取决于您的用例,您需要了解其含义。
函数bad()
为"不可恢复的错误"生成true
- 无论这意味着什么。基本上,每当某些内容由于某种形式的格式错误不同的原因而失败时,就会设置bad()
。有趣的是,各种文件流类(std::ofstream
、std::ifstream
和std::fstream
)的open()
函数都设置std::ios_base::failbit
文件缓冲区的open()
失败!也就是说,不能使用 stream.bad()
来测试open()
是否失败。您可以使用stream.fail()
.就个人而言,我不会打扰并使用转换为bool
:
std::ofstream out("file");
if (out) {
process();
}
else {
report_error();
}
是的,你可以,ios::bad()
返回一个boolean
,!
将简单地否定boolean
(即true
-> false
反之亦然)。
这是否是你打算做的是一个不同的问题。 bad()
检查流是否失去完整性,而不是无法打开。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 用于访问容器<T>数据成员的正确 API
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- C++中的cin.ignore()函数不适用于整个流
- 没有用于初始化C++中的变量模板的匹配构造函数
- 用于C++中带有数组和指针的循环
- 为什么它不适用于Visual 2019的原因
- 使用在用于SFINAE的void_t中具有参数的方法
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 重载==不适用于二进制树
- Insert函数不适用于2 if语句C++
- 用于矢量处理的多个线程
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 为什么模数运算符不适用于该代码
- 并行用于C++17中数组索引范围内的循环
- 将fold表达式与std::一起用于两个元组
- 成员函数 bad() 的 std::ftsream 用于检查