【问题标题】:How is fstream / ifstream / ofstream objects convert to boolfstream / ifstream / ofstream 对象如何转换为 bool
【发布时间】:2020-06-05 02:40:55
【问题描述】:

我想知道,这些对象如何转换为布尔值。我的意思是编译器在转换时所依赖的内容。在位标志上​​?我认为它是这样工作的:编译器检查标志,如果!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;

附:我英语不好,对不起

【问题讨论】:

  • 你的答案是here
  • 正如@Asteroids 指出的那样,您不必猜测,只需在文档中查找即可(顺便说一句,为什么这不是您做的第一件事?)。
  • 对于 OPs 防御,如果你不知道该找什么很容易错过,在 c++11 之前甚至没有直接转换为bool
  • @idclev C++11 现在已经 9 岁多了。没有人应该使用较旧的东西 - 大多数人应该使用明显更新的东西。
  • @JesperJuhl 我的意思是c++ 的新手可能不知道他们需要寻找operator bool(我完全同意“应该”但不幸的是“裁判”表明C++98 默认仍然存在)

标签: c++ fstream


【解决方案1】:

编译器使用operator bool 将流转换为布尔值。在文档中你可以读到std::basic_ios&lt;CharT,Traits&gt;::operator bool

检查流是否没有错误。

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

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

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

【讨论】:

  • 谢谢!这真的是我要找的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2018-11-21
相关资源
最近更新 更多