26

(たとえば、以外)と(たとえば、std::ios_base::ate以外)のポイントは何ですか?std::ios_base::appstd::ios_base::truncstd::ios_base::out

std::ios_base::smthそして、代わりに書くべきstd::ios::smthですか?

4

1 に答える 1

24

std::ios_base::ate カーソルをテキストの最後に配置しますが、 std::ios_base_app はテキストを (書き込み操作で) 最後に追加しますが、最初から読むことはできます :)

std::ios_base::trunc はファイルを切り捨てて空にしますが、 std::ios_base::out はストリームへの書き込みを指定するだけです。

現在、標準を引用することはできません (私のタブレットでは、Acrobat Reader ではコピーが許可されません) が、ISO 14882:1998 のパラグラフ 27.4.2.1.4 から、リンクで確認できる情報はほぼ正確です: http:/ /cplusplus.com/reference/iostream/ios_base/openmode/

総括する:

std::ios_base::app = append

「各書き込みの前に最後までシークする」ことにより、ストリームの最後に追加します

std::ios_base::ate = At The End

開いた後、最後にすぐに開いてシークする

std::ios_base::binary = binary

テキストではなくバイナリで操作を実行する

std::ios_base::in = input

読み取りモードで開く

std::ios_base::out = output

書き込みモードで開く

std::ios_base::trunc = truncate

開始時にストリームを切り捨てます。

これらの値は単なるフラグであるため、最後に次のように読み書きバイナリでストリームを開くことができます。

std::ios_base::in | std::ios_base::out | std::ios_base::ate | std::ios_base::binary

それらの値の使い方については、お好みで。それらはstd::ios_baseクラスの public static フィールドとして宣言されているため (27.4.2 を参照)、または!std::ios::ateのようなものを使用してアクセスすることができます。cout.binary


あなたが注意しなければならない点は、それが意味するものでも意味std::ios_base::ateするものstd::ios_base::appでもないということです。各フィールドには異なる意味があり、使用のケースも異なりますが、それらのほとんどは単独では使用できません :)std::ios_base::outstd::ios_base::trunc

于 2012-09-03T19:44:35.283 に答える