2

NicolaiJosuttisの本「TheC++Standard Library」(初版)の518ページにあるこの段落について説明したいと思います。

これらのフラグはクラスによって維持されるため、タイプまたはbasic_iosのすべてのオブジェクトに存在します。ただし、ストリームバッファには状態フラグがありません。1つのストリームバッファは複数のストリームオブジェクトで共有できるため、フラグは最後の操作で見つかったストリームの状態のみを表します。これでも、この操作の前にgoodbitが設定されている場合にのみ当てはまります。それ以外の場合、フラグは以前の操作によって設定されている可能性があります。basic_istreambasic_ostream

彼が「ストリームバッファに状態フラグがない」とはどういう意味かわかりません。この段落のすぐ下に、「ストリーム状態のメンバー関数」というタイトルの表があります。

4

5 に答える 5

2

ストリームは2つのオブジェクトで構成されます。

  1. 実際のストリームオブジェクト(std::istreamまたはstd::ostream、から派生std::ios)。
  2. ストリームバッファ、つまり。から派生したクラスstd::streambuf

状態フラグはに存在しますが、には存在しstd::iosませんstd::streambuf

于 2013-01-06T00:10:46.430 に答える
1

「ストリームバッファオブジェクト」と「ストリームオブジェクト」があります。1つのストリームバッファを複数のストリームオブジェクト間で共有できます。各ストリームオブジェクトには独自のフラグのセットがあるため、1つのストリームが「ファイルの終わりに到達」し、別のストリームがそうではない場合があります。または、同じバッファを使用する2つの出力ストリームで10進数または16進数の出力のフラグが完全に異なる場合があります。

[もちろん、複数のストリームに同じバッファーを使用している場合は、混乱しないように注意する必要があります。複数のストリームでバッファーを共有することは一般的ではありませんが、実行できます。 ]

于 2013-01-06T00:10:22.633 に答える
1

フラグにはiostate、出力の書式設定に関する情報が格納されます。数値を10進数または16進数、大文字または小文字などで印刷するかどうか。ストリームオブジェクトは書式設定を制御するため、フラグはストリームオブジェクト内にあります。

iostreamでは、バッファリングはフォーマットとは別のものです。iostreamオブジェクトにリンクされているのは、基になるソースからの文字の送受信を制御するストリームバッファオブジェクトです。バッファオブジェクトにはそのようなフラグはありません。その唯一の状態変数は、文字の準備(エンコード)と、オプションでそれらの保存(バッファリング)を処理して、オペレーティングシステムがI/Oの実行を要求される回数を減らします。(または、の場合stringstream、バッファはストリームの背後にある究極のストレージを提供します。)

于 2013-01-06T00:10:27.923 に答える
1

したがって、ストリーム には状態フラグがありますが、使用するストリームバッファにはありません

ストリームバッファはストリーム内に入ります。

バッファは、ストリームが通信しているもの(file / stdin / tcpsocket / etc。)に送信/受信する前に、ストリームが読み取り/書き込みしているバイト数を保持します。

ストリームリファレンス:http ://www.cplusplus.com/reference/istream/iostream/

ストリームバッファリファレンス:http ://www.cplusplus.com/reference/streambuf/streambuf/

デフォルトでは、ストリームは通常、独自のストリームバッファーを作成しますが、コンストラクターで選択したものの1つを使用するように指示できます:http ://www.cplusplus.com/reference/istream/iostream/iostream/

または、 rdbufメソッドを使用してバッファを取得/設定できます。

于 2013-01-06T00:15:12.147 に答える
0

「ストリームバッファ」は、basic_streambufクラスのオブジェクトです。そのクラスには状態フラグがありません。すべてのストリーム(basic_istreamまたはbasic_ostream)にはbasic_streambufへのポインターがありますが、フラグはストリームバッファーではなく、ストリームのプロパティです。

于 2013-01-06T00:13:47.587 に答える