也许是一个虚假的问题,但我需要一个明确的答案。在返回任何这些函数时是否有任何区别
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()完全相同的结果吗?
答案 0 :(得分:10)
没有。 is_open
仅检查是否存在关联文件,而转换为bool
还检查文件是否已准备好进行I / O操作(例如,流处于良好状态)(因为C ++) 11)。
is_open
检查文件流是否有关联文件。
std::basic_ios::operator bool
如果流没有发生错误并且已准备好进行I / O操作,则返回true。具体来说,返回
!fail()
。