std::strstreambuf:: strstreambuf
From cppreference.net
<
cpp
|
io
|
strstreambuf
| (1) | ||
|
explicit
strstreambuf
(
std::
streamsize
alsize
=
0
)
;
|
(C++98 中已弃用)
(直至 C++11) |
|
|
strstreambuf
(
)
:
strstreambuf
(
0
)
{
}
explicit strstreambuf ( std:: streamsize alsize ) ; |
(自 C++11 起) (于 C++26 移除) | |
|
strstreambuf
(
void
*
(
*
palloc
)
(
std::
size_t
)
,
void
(
*
pfree
)
(
void
*
)
)
;
|
(2) |
(C++98 中已弃用)
(于 C++26 移除) |
|
strstreambuf
(
char
*
gnext,
std::
streamsize
n,
char
*
pbeg
=
0
)
;
|
(3) |
(C++98 中已弃用)
(于 C++26 移除) |
|
strstreambuf
(
signed
char
*
gnext,
std::
streamsize
n,
signed
char
*
pbeg
=
0
)
;
|
(4) |
(C++98 中已弃用)
(于 C++26 移除) |
|
strstreambuf
(
unsigned
char
*
gnext,
std::
streamsize
n,
unsigned
char
*
pbeg
=
0
)
;
|
(5) |
(C++98 中已弃用)
(于 C++26 移除) |
|
strstreambuf
(
const
char
*
gnext,
std::
streamsize
n
)
;
|
(6) |
(C++98 中已弃用)
(于 C++26 移除) |
|
strstreambuf
(
const
signed
char
*
gnext,
std::
streamsize
n
)
;
|
(7) |
(C++98 中已弃用)
(于 C++26 移除) |
|
strstreambuf
(
const
unsigned
char
*
gnext,
std::
streamsize
n
)
;
|
(8) |
(C++98 中已弃用)
(于 C++26 移除) |
1)
构造一个
std::strstreambuf
对象:通过调用
std::streambuf
的默认构造函数初始化基类,将缓冲区状态初始化为"动态"(缓冲区将按需分配),将分配大小初始化为提供的
alsize
,将分配和释放函数初始化为空(将使用
new
[
]
和
delete
[
]
)。
2)
构造一个
std::strstreambuf
对象:通过调用
std::streambuf
的默认构造函数来初始化基类,将缓冲区状态初始化为"动态"(缓冲区将按需分配),将分配大小初始化为未指定值,将分配函数初始化为
palloc
,将释放函数初始化为
pfree
。
3-5)
按以下步骤构造
std::strstreambuf
对象:
a)
通过调用
std::streambuf
的默认构造函数来初始化基类。
b)
将缓冲区状态初始化为 "constant"(缓冲区是用户提供的固定大小缓冲区)。
c)
按以下方式确定用户提供数组的元素数量:若
n
大于零,则使用
n
;若
n
为零,则执行
std::
strlen
(
gnext
)
以确定缓冲区大小;若
n
为负数,则使用
INT_MAX
。
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 | 默认构造函数为显式 | 改为隐式 |
示例
运行此代码
#include <iostream> #include <strstream> 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
的公开成员函数)
|