【问题标题】:behavior of open (file) in I/OI/O 中打开(文件)的行为
【发布时间】:2020-03-15 20:45:37
【问题描述】:

在运行这些代码时:

std::fstream f;
if(f.open("n",std::fstream::in))           //ERROR

收到的错误是:

无法将 'f.std::basic_fstream::open(((const char*)"n"), ((std::ios_base::openmode)std::ios_base::in))' 从 ' void' 到 'bool'

但是在使用 filebuf 对象运行相同的代码时,它运行良好:

std::filebuf f;
if(f.open("n",std::fstream::in))          //works fine

fstreamfilebuf 对象都可以用来调用open 时,为什么会发生这种情况?

【问题讨论】:

  • fstream::open 不返回任何内容。 filebuf::open 如果文件打开则返回 this,否则返回 NULL。
  • 它们的功能不同。 fstream 有自己的 open 方法(在内部调用 filebuf::open)并决定不返回任何内容。如果文件无法打开,它将反映在“流状态”中,您可以在 open 调用后通过 if (f.fail()) 进行检查。
  • @0x499602D2 知道了,谢谢!!我对一个函数的返回方式不同感到困惑

标签: c++ file io


【解决方案1】:

fstream 有自己的open 方法(在内部调用filebuf::open)并决定不返回任何内容。如果文件无法打开,它将反映在“流状态”中,您可以在 open 调用之后通过 if (f.fail()) 进行检查。

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多