std::strstreambuf:: setbuf
From ja.cppreference.net
<
cpp
|
io
|
strstreambuf
|
protected
:
virtual streambuf * setbuf ( char * s, std:: streamsize n ) ; |
(C++98で非推奨)
(C++26で削除) |
|
s がヌルポインタであり、かつ n がゼロの場合、この関数は何も行いません。
そうでない場合、その効果は実装定義である:一部の実装では何も行わないが、一部の実装ではバッファとして使用されている動的メンバ配列を解放し、サイズ n のユーザー提供の文字配列(その最初の要素は s が指す)の使用を開始する。
この関数はprotected virtualであり、
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を呼び出す
setbuf
(
)
( std::basic_streambuf<CharT,Traits>のpublicメンバー関数)
|
|
|
[virtual]
|
許可されている場合、バッファをユーザー定義の配列で置き換える
( std::basic_streambuf<CharT,Traits>のvirtual protectedメンバー関数)
|
|
[virtual]
|
制御された文字シーケンスを配列で置き換えることを試みる
( std::basic_stringbuf<CharT,Traits,Allocator>のvirtual protectedメンバー関数)
|
|
[virtual]
|
ユーザー提供のバッファを設定するか、このfilebufを非バッファリングモードにする
( std::basic_filebuf<CharT,Traits>のvirtual protectedメンバー関数)
|