この答えはコンパイラ固有のものですが、注目されるのは驚くべきことです:-
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::in
ios_base::out