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();
}

言い換えれば、私の質問は次のとおりです。をキャストするfstreambool、とまったく同じ結果が得られfstream::is_open()ますか?

4

1 に答える 1

11

関連付けis_openられたファイルがあるかどうかのみをチェックしますが、へのキャストboolは、ファイルが I/O 操作の準備ができているかどうか (たとえば、ストリームが良好な状態であるかどうか) もチェックします (C++11 以降)。

is_open

ファイル ストリームに関連ファイルがあるかどうかを確認します。

std::basic_ios::operator bool

ストリームにエラーが発生しておらず、I/O 操作の準備ができている場合は true を返します。具体的には、 を返します!fail()

于 2013-02-17T11:13:31.793 に答える