std::strstreambuf::setbuf
From cppreference.com
< cpp | io | strstreambuf
| protected: virtual streambuf* setbuf( char* s, std::streamsize n ); |
(C++98で非推奨) (C++26で削除) |
|
もし s がヌルポインタで n がゼロである場合、この関数は何も行いません。
それ以外の場合、その効果は実装定義です。実装によっては何も行わないものもあれば、バッファとして使用されていた動的メンバ配列を解放し、 n サイズで、先頭要素が s によって指される、ユーザー供給の文字配列の使用を開始するものもあります。
この関数は保護仮想関数です。pubsetbuf() を介して、または std::strstreambuf から派生したユーザー定義クラスのメンバ関数からのみ呼び出すことができます。
目次 |
[編集] パラメータ
| s | - | ユーザー提供バッファの最初のバイトへのポインタ |
| n | - | ユーザー提供バッファのバイト数 |
[編集] 戻り値
this
[編集] 例
動的な strstream で setbuf() がサポートされているかを確認するための実装テスト(Sun Studio で取得した出力)
このコードを実行
#include <iostream> #include <strstream> int main() { char a[100] = {}; std::strstream str; str.rdbuf()->pubsetbuf(a, sizeof a); str << "Test string" << std::ends; std::cout << "user-provided buffer holds \"" << a << "\"\n"; }
実行結果の例
user-provided buffer holds "Test string"
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 66 | C++98 | setbuf() の効果は「strstreambuf から派生した各クラスごとに別個に定義される操作を実行する」とされていましたが、 strstreambuf から派生したクラスはありません。効果は |
定義されます。 実装定義 |
[編集] 関連項目
| setbuf() を呼び出す ( std::basic_streambuf<CharT,Traits> の public メンバ関数) | |
| [virtual] |
許可されていれば、バッファをユーザー定義配列で置き換える ( std::basic_streambuf<CharT,Traits> の仮想 protected メンバ関数) |
| [virtual] |
制御文字シーケンスを配列で置き換えようとするstd::basic_stringbuf<CharT,Traits,Allocator> の(仮想保護メンバ関数) |
| [virtual] |
ユーザー提供のバッファを提供する、またはこのファイルバッファをバッファリングなしにする ( std::basic_filebuf<CharT,Traits>の仮想protectedメンバ関数) |