C ++:将ifstream转换为bool并使用ifstream :: is_open()之间的区别

时间:2013-02-17 11:11:11

标签: c++ casting fstream ifstream ofstream

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

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()完全相同的结果吗?

1 个答案:

答案 0 :(得分:10)

没有。 is_open仅检查是否存在关联文件,而转换为bool还检查文件是否已准备好进行I / O操作(例如,流处于良好状态)(因为C ++) 11)。

is_open

  

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

std::basic_ios::operator bool

  

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