std::strstream:: strstream
From cppreference.net
|
strstream
(
)
;
|
(1) |
(C++98 中已弃用)
(C++26 中移除) |
|
strstream
(
char
*
s,
int
n,
std::
ios_base
::
openmode
mode
=
std:: ios_base :: in | std:: ios_base :: out ) ; |
(2) |
(C++98 中已弃用)
(C++26 中移除) |
构造新的输入/输出字符串流及其底层的 std::strstreambuf 。
1)
默认构造底层的
std::strstreambuf
,这会创建一个动态增长的缓冲区,并使用该 strstreambuf 成员的地址初始化基类。
2)
使用底层
std::strstreambuf
成员的地址初始化基类,该成员通过以下两种可能方式之一进行初始化,两种方式均使用用户提供的固定大小数组:
a)
如果
(
mode
&
app
)
==
0
(
mode
中未设置
app
位),则通过调用
strstreambuf
(
s, n, s
)
构造缓冲区。如果由
s
指向首元素的数组中元素数量少于
n
,则行为未定义。
b)
若
(
mode
&
app
)
!
=
0
(即
mode
中设置了
app
位),则通过调用
strstreambuf
(
s, n, s
+
std::
strlen
(
s
)
)
构造缓冲区。若以
s
指向首元素的数组元素数量少于
n
,或该数组不包含有效的空终止字符序列,则行为未定义。
目录 |
参数
| s | - | 用作输出缓冲区的 char 数组 | ||||||||||||||||
| n | - | 用于输出的数组大小 | ||||||||||||||||
| mode | - |
指定流打开模式。此为位掩码类型,定义了以下常量(但仅使用
app
):
|
示例
运行此代码
#include <iostream> #include <string> #include <strstream> int main() { // 动态缓冲区 std::strstream s1; s1 << 1 << ' ' << 3.14 << " example" << std::ends; std::cout << "Buffer holds: '" << s1.str() << "'\n"; s1.freeze(false); int n; double d; std::string w; s1 >> n >> d >> w; std::cout << "Read back: n = " << n << ", d = " << d << ", w = '" << w << "'\n"; // 静态缓冲区 char arr[20] = "-1 -3.14 "; std::strstream s2(arr, sizeof arr, std::ios_base::app); s2 << "another" << std::ends; std::cout << "Buffer holds: '" << s2.str() << "'\n"; s2 >> n >> d >> w; std::cout << "Read back: n = " << n << ", d = " << d << ", w = '" << w << "'\n"; }
输出:
Buffer holds: '1 3.14 example' Read back: n = 1, d = 3.14, w = 'example' Buffer holds: '-1 -3.14 another' Read back: n = -1, d = -3.14, w = 'another'
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 115 | C++98 |
重载(2)仅考虑情况
mode & app == 0 (
==
的优先级高于
&
)
|
考虑情况
(
mode
&
app
)
==
0
和 ( mode & app ) ! = 0 |
参见
构造
strstreambuf
对象
(
std::strstreambuf
的公开成员函数)
|
|
构造
istrstream
对象,可选择性地分配缓冲区
(
std::istrstream
的公开成员函数)
|
|
构造
ostrstream
对象,可选择性地分配缓冲区
(
std::ostrstream
的公开成员函数)
|