7

也许是一个愚蠢的问题,但我需要一个明确的答案。这些函数的返回是否有任何区别

int FileExists(const std::string& filename)
{
  ifstream file(filename.c_str());
  return !!file;
}

int FileExists(const std::string& filename)
{
  ifstream file(filename.c_str());
  return file.is_open();
}

所以换句话说,我的问题是:强制转换fstream是否bool给出与 完全相同的结果fstream::is_open()

4

1 回答 1

11

No.is_open仅检查是否存在关联文件,而强制转换bool也检查文件是否准备好进行 I/O 操作(例如,流处于良好状态)(C++11 起)。

is_open

检查文件流是否有关联文件。

std::basic_ios::operator bool

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

于 2013-02-17T11:13:31.793 回答