4

streambufのbasic_streambuf3つの「gptrs」を設定するメンバーは、次のsetgように宣言されます。

protected:
  void setg(char_type *gback, char_type *gptr, char_type *egptr);

私は疑問に思っています:なぜ各gptrのタイプがchar_type*代わりに作られたのconst char_type*ですか?const_castこれらのgptrにconstcharポインターを使用するために、ここで使用しても安全ですか?

4

1 に答える 1

6

streambufインターフェイスはバッファにどのようにデータを入力しているかを認識していないため、これは const ではありません。たとえば、 メソッドunderflowとメソッドは、ファイルなどからnuflowバイトをプルして、streambuf の現存するバッファに入力することができます。また、読み取り/書き込みストリーム ストリームのバッファーに同じストレージを使用している場合もあります。streambuf はバッファ、つまりキャッシュです。の書式設定機能と実際の基になる文字ストリーム (通常はファイル) の間に位置します。それはその下にあるストリームへのウィンドウであり、そのウィンドウのストレージを再利用することは理にかなっています (つまり、おそらく const ではないということです)。[io]stream

const-ness を捨てても安全ですか? 多分。実際の streambuf の実装とその使用方法によって異なります。

于 2010-12-05T23:53:23.213 に答える