std::strstream::strstream
来自cppreference.com
| |
(1) | (C++98 弃用) (C++26 移除) |
| |
(2) | (C++98 弃用) (C++26 移除) |
构造新的输入/输出 strstream 和它底层的 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):
|
示例
Run this code
#include <iostream>
#include <string>
#include <strstream>
int main()
{
// 动态缓冲区
std::strstream s1;
s1 << 1 << ' ' << 3.14 << " example" << std::ends;
std::cout << "缓冲区持有:'" << s1.str() << "'\n";
s1.freeze(false);
int n;
double d;
std::string w;
s1 >> n >> d >> w;
std::cout << "读取: 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 << "缓冲区持有:'" << s2.str() << "'\n";
s2 >> n >> d >> w;
std::cout << "读取:n = " << n
<< " d = " << d
<< " w = '" << w << "'\n";
}
输出:
缓冲区持有:'1 3.14 example'
读取:n = 1 d = 3.14 w = 'example'
缓冲区持有:'-1 -3.14 another'
读取: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 的公开成员函数)
|