std::ios_base::truncでフラグを使用する目的は何std::ios_base::outですか? これは多くの例で見ました。
ファイルを切り捨てることも標準によって保証されていると思いましたstd::ios_base::out(そして、私が知っているすべてのSTL実装はこれを行います)。ファイルを切り捨てたいことを明示的に通知する必要がありますか?
std::ios_base::truncでフラグを使用する目的は何std::ios_base::outですか? これは多くの例で見ました。
ファイルを切り捨てることも標準によって保証されていると思いましたstd::ios_base::out(そして、私が知っているすべてのSTL実装はこれを行います)。ファイルを切り捨てたいことを明示的に通知する必要がありますか?
はい、instd::ios_base::outと同等です。"w"fopen
ポイントstd::ios_base::truncは、std::ios_base::inとstd::ios_base::outを同時に使用する場合です。
in | outと同等です"r+"in | out | truncと同等です"w+"binary | in | outと同等です"rb+"binary | in | out | truncと同等です"wb+"多分テーブルはより明白になるでしょう:
binary in out trunc | stdio equivalent
-----------------------+-----------------
+ + | "r+"
+ + + | "w+"
+ + + | "r+b"
+ + + + | "w+b"
ファイルを拡張するのではなく、ファイルの内容を置き換えるには、ファイルを開く必要があります
std::ios_base::out | std::ios_base::trunc
出力ファイル ストリームの場合、オープン モード out は と同じです。out|truncつまり、truncflag は省略できます。
ただし、双方向ファイル ストリームの場合は、trunc常に明示的に指定する必要があります。
出力ファイルを拡張するには、フラグstd::ios_base::ate | std::ios_base::appを使用します。
truncここでは、フラグが設定されておらず、ファイルの初期位置がファイルの最後にあるため、ファイルの内容は保持されます。
ただし、追加 truncのフラグを設定することができ、ファイルの内容は破棄され、出力は空のファイルの最後に行われます。
冗長です。つまり、持っていてもいなくても違いはありません。
std::ios_base::out | std::ios_base::in明らかに、冗長ではないなど、いくつかの組み合わせでは。