为啥 std::fstream 返回 void 而不是 bool

Posted

技术标签:

【中文标题】为啥 std::fstream 返回 void 而不是 bool【英文标题】:Why std::fstream returns void instead of bool为什么 std::fstream 返回 void 而不是 bool 【发布时间】:2012-10-03 20:14:01 【问题描述】:

为什么来自 C++ 标准库的 std::fstream 类的成员函数 open 返回 void 而不是 bool 以立即检查是否成功打开?

【问题讨论】:

返回 bool 的含义并不一定很明显:它可能意味着“如果发生错误则返回 true”以及“如果成功则返回 true”。有不同的设计选择。没有办法让 .isGood() 或 isBad() 出错。 【参考方案1】:

因为如果设置了异常,当open 调用不成功时它会抛出异常,或者它们使用failbit 来指示发生了错误。来自文档:

失败时,设置失败位标志(可以通过成员检查 失败),并且根据设置有异常的值,可能会出现异常 被扔掉。

【讨论】:

只有设置了异常才会抛出 感谢 cmets。添加到答案以进行澄清。【参考方案2】:

我的理解是,当 fstream 允许您尝试读取(或者我想也可以写入)任何类型的文件时,fstream 可能会以多种方式失败。根据情况和程序员的不同,“失败”也可能是模棱两可的。鉴于此,我认为很难从布尔返回值中得到任何有意义的东西。

【讨论】:

以上是关于为啥 std::fstream 返回 void 而不是 bool的主要内容,如果未能解决你的问题,请参考以下文章

当返回类型为 void 时,为啥 Spring RestController POST 方法返回 200 而不是 204?

为啥 List.add(E) 返回 boolean 而 List.Add(int, E) 返回 void?

为啥 ExecutorService.submit(Runnable task) 返回 Future<?> 而不是 Future<Void>?

Windows std::fstream 在 open() 之后修改文件?

从 std::fstream 获取 FILE*

std :: fstream的公共继承和重载运算符<