[解決済み] streambufとは何ですか?どう使えばいいのですか?
質問
C++でI/Oストリームがどのように動作するかについてもう少し学びたいのですが、いつ何を使えばいいのか本当に混乱しています。
正確には
streambuf
?
を使用するのはいつですか?
streambuf
と比較して
string
に比べて
istream
または
vector
? (最後の3つは既に知っていますが、どのように
streambuf
がそれらに比べてどうなのか、もしそうであれば、ですが)
どのように解決するのですか?
ストリームバッファは入力または出力デバイスを表し、そのデバイスへの書式なしI/Oのための低レベルのインターフェイスを提供します。一方、ストリームは、基本的な書式なし I/O 関数や、特に書式付き I/O 関数を介して、バッファの周りのより高いレベルのラッパーを提供します (すなわち。
operator<<
と
operator>>
のオーバーロード)。ストリームオブジェクトは、ストリームバッファの寿命を管理することもできます。
例えば、ファイルストリームは内部にファイルストリームバッファを持っています。ストリームはバッファの寿命を管理し、バッファはファイルへの実際の読み取りと書き込み機能を提供するものです。ストリームのフォーマット演算子は最終的にストリームバッファの非フォーマットI/O関数にアクセスするので、ストリームのI/O関数だけを使用すればよく、バッファのI/O関数に直接触れる必要はありません。
この違いを理解するもう一つの方法は、ロケールオブジェクトの使い方の違いを見ることです。ストリームでは
numpunct
と
num_get
. また、ストリームのオーバーロードは
operator<<
と
operator>>
は、時間とお金のフォーマットファセットを使用します。しかし、ストリームバッファは、そのインターフェイスが使用する単位とバイトの間で変換するためにcodecvtファセットを使用します。ですから、例えば
basic_streambuf<char16_t>
は
char16_t
というように
basic_streambuf<char16_t>
は内部で
codecvt<char16_t, char, mbstate_t>
をデフォルトで使用し、フォーマットされた
char16_t
に変換します。
char
に書き込まれます。つまり、ストリームは主にフォーマットするためのもので、ストリームバッファは異なる外部エンコーディングを使用するデバイスへのフォーマットされていない入力や出力のための低レベルのインタフェースを提供することがお分かりいただけるでしょう。
I/Oデバイスにフォーマットされていないアクセスのみが必要な場合、ストリームバッファを使用することができます。また、ストリームバッファを共有する複数のストリームをセットアップしたい場合にも、ストリームバッファを使用できます (ただし、バッファの寿命を注意深く管理する必要があります)。また、以下のような特殊用途のストリームバッファもあります。
wbuffer_convert
のファサードとして機能する C++11 の basic_streambuf<char>
のファサードとして機能し、広い文字ストリームバッファのように見せます。これは、任意のロケールに接続された codecvt ファセットを使用する代わりに、それが構築された codecvt ファセットを使用します。通常、適切なファセットを持つロケールが組み込まれたワイドストリームバッファを使用するだけで、同じ効果を得ることができます。
関連
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] 8192個の要素にループをかけると、プログラムが遅くなるのはなぜですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】'cout'は型名ではない
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された