24

const である以下のような関数があり、続行する前にファイル ストリームが開いていることを確認する必要があります。

bool MyClass::checkSomeStuff() const
{
    // Where outputFile_ is a std::ofstream
    if ( ! outputFile_.is_open() )
    {
        throw std::runtime_error( "Output file not open." );
    }

    // ... do more stuff

is_open()ただし、次のように宣言されているため、これを行うことはできないようです。

bool is_open ( );

(つまり、非定数)

私には、このような関数 (明らかに純粋なアクセサー) が非 const であることは少し奇妙に思えます。その背後に理にかなっているロジックはありますか?

4

3 に答える 3

21

実際constにはC++ 11にあります。C++03 バージョンは残念なエラーです。

于 2012-07-13T08:21:46.550 に答える
13

これは、標準ライブラリの既知の不一致です。詳細については、こちらを参照してください: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#365

于 2012-07-13T08:21:07.630 に答える
-1
  • CPPReference を見てみましょうis_open()

メンバー open への以前の呼び出しが成功した場合、またはパラメーター化されたコンストラクターを使用してオブジェクトが正常に構築され、その後 close が呼び出されていない場合、ストリームはファイルに関連付けられます。

open()そのため、 /の直後に使用しclose()ます。is_open()それが古い非定数の理由です。;)

  • bool good() const代わりに使用してください。
于 2012-07-13T08:23:30.327 に答える