std::strstreambuf::strstreambuf
来自cppreference.com
< cpp | io | strstreambuf
(1) | ||
explicit strstreambuf( std::streamsize alsize = 0 ); |
(C++11 前) | |
strstreambuf() : strstreambuf(0) {} explicit strstreambuf( std::streamsize alsize ); |
(C++11 起) | |
strstreambuf( void* (*palloc)(std::size_t), void (*pfree)(void*) ); |
(2) | |
strstreambuf( char* gnext, std::streamsize n, char* pbeg = 0 ); |
(3) | |
strstreambuf( signed char* gnext, std::streamsize n, signed char* pbeg = 0 ); |
(4) | |
strstreambuf( unsigned char* gnext, std::streamsize n, unsigned char* pbeg = 0 ); |
(5) | |
strstreambuf( const char* gnext, std::streamsize n ); |
(6) | |
strstreambuf( const signed char* gnext, std::streamsize n); |
(7) | |
strstreambuf( const unsigned char* gnext, std::streamsize n ); |
(8) | |
1) 构造
std::strstreambuf
对象:通过调用 std::streambuf 的默认构造函数初始化基类,初始化缓冲状态为“动态”(将按需分配缓冲区),初始化已分配大小为提供的 alsize
,初始化分配和解分配函数为空值(将使用 new[] 与 delete[] )。2) 构造
std::strstreambuf
对象:通过调用 std::streambuf 的默认构造函数初始化基类,初始化缓冲状态为“动态”(将按需分配缓冲区),初始化已分配大小为未指定值,初始化分配函数为 palloc
,解分配函数为 pfree
。3-5) 依下列步骤构造
std::strstreambuf
对象:a) 通过调用 std::streambuf 的默认构造函数初始化基类
b) 初始化缓冲状态为“冻结”(缓冲区为用户提供的固定大小缓冲区)
d) 以下列方式配置 std::basic_streambuf 的指针:若
pbeg
为空指针,则调用 setg(gnext, gnext, gnext + N) 。若 pbeg
不是空指针,则执行 setg(gnext, gnext, pbeg) 和 setp(pbeg, pbeg+N) ,其中 N 是之前确定的数组中的元素数。6-8) 同 strstreambuf((char*)gnext, n) ,除了在缓冲状态位掩码中设置“常量”(不允许输出到此缓冲区)。
参数
alsize | - | 动态分配的缓冲区的初始大小 |
palloc | - | 指向用户提供的分配函数的指针 |
pfree | - | 指向用户提供的解分配函数的指针 |
gnext | - | 指向用户提供的数组中获取区起始的指针 |
pbeg | - | 指向用户提供的数组中放置区起始的指针 |
n | - | 用户提供数组的获取区(若 pbeg 为空)或放置区(若 pbeg 非空)中的字节数 |
注意
这些构造函数常为 std::strstream 的构造函数所调用
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
P0935R0 | C++11 | 默认构造函数曾为 explicit | 使之为隐式 |
示例
运行此代码
#include <strstream> #include <iostream> int main() { std::strstreambuf dyn; // 动态 std::strstream dyn_s; // 等价的流 dyn_s << 1.23 << std::ends; std::cout << dyn_s.str() << '\n'; dyn_s.freeze(false); char buf[10]; std::strstreambuf user(buf, 10, buf); // 用户提供的输出缓冲区 std::ostrstream user_s(buf, 10); // 等价的流 user_s << 1.23 << std::ends; std::cout << buf << '\n'; std::strstreambuf lit("1 2 3", 5); // 常量 std::istrstream lit_s("1 2 3"); // 等价的流 int i, j, k; lit_s >> i >> j >> k; std::cout << i << ' ' << j << ' ' << k << '\n'; }
输出:
1.23 1.23 1 2 3
参阅
构造 strstream 对象,部分情况下会分配缓冲区 ( std::strstream 的公开成员函数) |