2010-12-05 3 views
3

streambufの3つの "gptrs"を設定するbasic_streambufメンバー、setgは次のように宣言されています:const char_type *ではなく、basic_streambuf char_type *の "gptr"タイプはなぜですか?

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

私は疑問に思っています:なぜ各gptrのタイプはconst char_type*の代わりにchar_type*になりましたか?これらのgptrsのためにconst charポインタを使うのにconst_castを使うのは安全ですか?

答えて

5

streambufインターフェイスでバッファをどのように設定しているのかわからないので、constではありません。例えば、underflowおよびuflowのメソッドは、ファイルなどからnバイトを引き出し、streambufの現存するバッファに移入することがあります。また、読み書きストリームストリームのバッファにも同じストレージを使用している場合があります。 streambufはバッファ、キャッシュならば可能です。これは、[io]streamのフォーマット機能と実際の文字ストリーム(通常はファイル)の間にあります。これは基本的なストリームのウィンドウであり、そのウィンドウのストレージを再利用することは理にかなっています(これはおそらくconstではないことを意味します)。

恒常性を捨てても安全ですか?多分。これは、実際のstreambuf実装とその使用方法によって異なります。

+0

もちろん! :)私は現在、定数C文字列のstreambufを書いているので、私は混乱していました。私の目的のために、「アンダーフロー」と「流出」は使用されていません。愚かな私。本当に素敵な答えを書くのにも+1。 –

関連する問題