std::basic_streambuf<CharT,Traits>::pubsetbuf, std::basic_streambuf<CharT,Traits>::setbuf
来自 cppreference.cn
< cpp | io | basic streambuf
public: basic_streambuf<CharT, Traits>* pubsetbuf( char_type* s, std::streamsize n ) |
(1) | |
protected: virtual basic_streambuf<CharT, Traits>* setbuf( char_type* s, std::streamsize n ) |
(2) | |
1) 调用最派生类的 setbuf(s, n)。
2) 此函数的基础类版本不起作用。派生类可以重写此函数,以允许使用用户提供的数组移除或替换受控字符序列(缓冲区),或用于任何其他特定于实现的用途。
目录 |
[编辑] 参数
s | - | 指向用户提供的缓冲区中第一个 CharT 的指针 |
n | - | 用户提供的缓冲区中 CharT 元素的数量 |
[编辑] 返回值
1) setbuf(s, n) 的返回值。
2) this
[编辑] 示例
为读取操作提供 10k 缓冲区。在 Linux 上,可以使用 strace 实用程序来观察实际读取的字节数。
运行此代码
#include <fstream> #include <iostream> #include <string> int main() { int cnt = 0; std::ifstream file; char buf[1024 * 10 + 1]; file.rdbuf()->pubsetbuf(buf, sizeof buf); file.open("/usr/share/dict/words"); for (std::string line; getline(file, line);) ++cnt; std::cout << cnt << '\n'; }
可能的输出
356010
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 158 | C++98 | 仅当 gptr() 不为空且不等于 egptr() 时,才指定 setbuf 的默认行为如果 gptr() 不为 null 且不等于 egptr() |
指定为无操作 适用于所有情况 |
[编辑] 参见
[虚函数] |
尝试用数组替换受控字符序列 ( std::basic_stringbuf<CharT,Traits,Allocator> 的虚保护成员函数) |
[虚函数] |
提供用户提供的缓冲区或将此 filebuf 设置为无缓冲 ( std::basic_filebuf<CharT,Traits> 的虚保护成员函数) |
[虚函数] |
尝试用数组替换受控字符序列 ( std::strstreambuf 的虚保护成员函数) |
为文件流设置缓冲区 (函数) |