私は現在、ioストリームフラグのメカニズムをよく理解していないと思います。それを理解するために、2つの具体例について質問します。
最初のものはオープンモードに関するものです。たとえば、std :: ofstreamの場合、次のようになります。
void open ( const char * filename, ios_base::openmode mode = ios_base::out );
app (append) Set the stream's position indicator to the end of the stream before each output operation.
ate (at end) Set the stream's position indicator to the end of the stream on opening.
binary (binary) Consider stream as binary rather than text.
in (input) Allow input operations on the stream.
out (output) Allow output operations on the stream.
trunc (truncate) Any current content is discarded, assuming a length of zero on opening.
次の質問があります。
std::ofstream stream;
// Question 1 : Here I don't specify std::ios::out, so why does it work ? :
stream.open("file.txt", std::ios::binary);
// Question 2 : Here I activate trunc, but how can I deactivate it ?
stream.open("file.txt", std::ios:binary | std::ios::trunc);
// Question 3 : What would be the result of that ?
stream.open("file.txt", std::ios::in);
2つ目は、状態フラグに関するものです。次の例を考えてみましょう。
std::ofstream stream;
std::cout<<stream.good()<<stream.bad()<<stream.fail()<<stream.eof()<<std::endl;
stream<<'x';
std::cout<<stream.good()<<stream.bad()<<stream.fail()<<stream.eof()<<std::endl;
/* SOMETHING */
ファイルが開かれていないため、結果は次のようになります。
1000 // <- Good bit is true
0110 // <- Fail and bad bit are true
質問4:/* SOMETHING */
toをリセットし、badbit
tofalse
を設定するeofbit
ために、の代わりに記述できるコードは何ですかtrue
(この操作はここでは意味がありませんが、これらのビットの動作を理解するためだけのものです)。