std::strstreambuf::setbuf
来自 cppreference.cn
< 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> 的公共成员函数) | |
[虚拟] |
如果允许,则用用户定义的数组替换缓冲区 ( std::basic_streambuf<CharT,Traits> 的虚拟受保护成员函数) |
[虚拟] |
尝试用数组替换受控制的字符序列 ( std::basic_stringbuf<CharT,Traits,Allocator> 的虚拟受保护成员函数) |
[虚拟] |
提供用户提供的缓冲区或将此 filebuf 变为无缓冲 ( std::basic_filebuf<CharT,Traits> 的虚拟受保护成员函数) |