fstream / ifstream / ofstream 对象如何转换为布尔值

How is fstream / ifstream / ofstream objects convert to bool

本文关键字:转换 布尔值 何转换 ifstream ofstream 对象 fstream      更新时间:2023-10-16

我想知道,这些对象是如何转换为布尔值的。我的意思是编译器在转换时所依赖的。在位标志上?正如我认为它的工作原理一样:编译器检查标志,如果 !goodbit 然后返回 false 否则为 true。 例如:

#include <iostream>
#include <fstream>
int main() {
std::ifstream file("someDir.txt");
if(!file) { \ Checks the flags? If !goodbit (eofbit, badbit or failbit) return false else true?
\some code
}
return 0;

附言我的英语不好,对不起

编译器使用operator bool将流转换为布尔值。在文档中,您可以阅读该std::basic_ios<CharT,Traits>::operator bool

检查流是否没有错误。

1( 如果返回true,则返回空指针fail(),否则返回非空指针。此指针可隐式转换为布尔值,可用于布尔上下文。

2( 如果流没有错误并且已准备好进行 I/O 操作,则返回true。具体来说,返回 !fail((。

在同一页上有一个非常有用的表格,详细说明了哪些位(eofbit, failbit, badbit(导致fail()返回真或假。