Namespaces
Variants

std::strstreambuf:: strstreambuf

From cppreference.net
(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 的公开成员函数)