0

先日、ファイルストリームオブジェクトのフラグを使ってテストしていました

そして、私はこれをしました。

fstream binf("h.txt", ios::app);
binf << "hey";

使用しなかったのでfstreamを使用するios::outと、出力操作は機能しないはずですが、機能します

ios::app出力操作はでのみ機能することに気付きましたが、それなしios::outで他のフラグを使用すると機能しません

ios::app使用せずに使用しているときにファイルに出力できた理由を誰かに教えてもらえますかios::out

4

3 に答える 3

2

ええと、追加することは書くことを意味します、それは私が思いつくことができる最も長い説明についてです。

于 2012-08-31T14:18:22.787 に答える
2

使用appすることは意味しoutます。

この標準では、モードのC fopenと同等の、同じ結果が得られるappと指定されています。out|app"a"

于 2012-08-31T14:21:35.637 に答える
0

この答えはコンパイラ固有のものですが、注目されるのは驚くべきことです:-


VS 2010 fstream-ios_base::outフラグはすでに設定されています

explicit basic_ofstream(const char *_Filename,
        ios_base::openmode _Mode = ios_base::out,
        int _Prot = (int)ios_base::_Openprot)
        : _Mybase(&_Filebuffer)
        {   
        if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0)
            _Myios::setstate(ios_base::failbit);
        }

GCC 4.5 fstream:- ここでもios_base::outフラグはすでに設定されています

explicit
      basic_ofstream(const char* __s,
             ios_base::openmode __mode = ios_base::out|ios_base::trunc)
      : __ostream_type(), _M_filebuf()
      {
    this->init(&_M_filebuf);
    this->open(__s, __mode);
      }

void
      open(const char* __s,
       ios_base::openmode __mode = ios_base::out | ios_base::trunc)
      {
    if (!_M_filebuf.open(__s, __mode | ios_base::out))
      this->setstate(ios_base::failbit);
    else
      this->clear();
      }

さらに興味深いのはios_base::in、最後のビットにのみがあります。これは、フラグで上げられた場合でもそのIDを保持できることを1意味します。ios_base::inios_base::out

于 2012-08-31T15:04:55.887 に答える