std::basic_stringbuf<CharT,Traits,Allocator>::basic_stringbuf

< cpp‎ | io‎ | basic stringbuf
basic_stringbuf()
    : basic_stringbuf(std::ios_base::in | std::ios_base::out) { }
(1) (C++11 起)
(2)
explicit basic_stringbuf( std::ios_base::openmode which =
                              std::ios_base::in | std::ios_base::out );
(C++11 前)
explicit basic_stringbuf( std::ios_base::openmode which );
(C++11 起)
explicit basic_stringbuf( const std::basic_string<CharT, Traits, Allocator>& s,

                          std::ios_base::openmode which =

                              std::ios_base::in | std::ios_base::out );
(3)
basic_stringbuf( const basic_stringbuf& rhs ) = delete;
(4) (C++11 起)
basic_stringbuf( basic_stringbuf&& rhs );
(5) (C++11 起)
explicit basic_stringbuf( const Allocator& a )
    : basic_stringbuf(std::ios_base::in | std::ios_base::out, a) { }
(6) (C++20 起)
basic_stringbuf( std::ios_base::openmode which, const Allocator& a );
(7) (C++20 起)
explicit basic_stringbuf( std::basic_string<CharT, Traits, Allocator>&& s,

                          std::ios_base::openmode which =

                              std::ios_base::in | std::ios_base::out );
(8) (C++20 起)
template<class SAlloc>

basic_stringbuf( const std::basic_string<CharT, Traits, SAlloc>& s,
                 const Allocator& a )

    : basic_stringbuf(s, std::ios_base::in | std::ios_base::out, a ) { }
(9) (C++20 起)
template<class SAlloc>

basic_stringbuf( const std::basic_string<CharT, Traits, SAlloc>& s,

                 std::ios_base::openmode, const Allocator& a );
(10) (C++20 起)
template<class SAlloc>

explicit basic_stringbuf( const std::basic_string<CharT, Traits, SAlloc>& s
                          std::ios_base::openmode which =

                              std::ios_base::in | std::ios_base::out );
(11) (C++20 起)
basic_stringbuf( basic_stringbuf&& rhs, const Allocator& a );
(12) (C++20 起)
1) 默认构造函数。是否初始化序列指针 (eback()gptr()egptr()pbase()pptr()epptr()) 为空指针是实现定义的。
2) 构造 std::basic_stringbuf 对象:通过调用 std::basic_streambuf 的默认构造函数初始化基类,以空字符串初始化字符序列,并设置模式为 which
3) 通过进行同 (1) 中的的操作构造 std::basic_stringbuf 对象,随后如同通过调用 str(new_str) 初始化关联字符序列。
4) 复制构造函数被删除; std::basic_stringbuf可复制构造 (CopyConstructible)
5) 通过从另一 std::basic_stringbuf 对象 rhs 移动所有状态,包含关联 string 、打开模式、 locale 和所有其他状态,移动构造 std::basic_stringbuf 对象。移动后,保证 *thisstd::basic_streambuf 的六个指针异于被移动的 rhs 中的指针,除非它们为空。
6-7)(1-2) ,除了用 a 构造关联 string 。
8)(3) ,除了用 std::move(s) 构造关联 string 。
9-10) 通过进行同 (1) 中的的操作构造 std::basic_stringbuf 对象,随后以 a 为其分配器,用 s 的内容初始化关联 string 。
11)(3) ,除了 s 的分配器的类型不是 Allocator 。此重载仅若 SAllocAllocator 不是同一类型才参与重载决议。
12)(5) ,除了用 a 构造关联 string 。

参数

s - 用于初始化缓冲区的 basic_string
a - 用于构造内部 basic_string 的另一分配器
rhs - 另一 basic_stringbuf
which - 指定流打开模式。它是位掩码类型,定义下列常量:
 
常量 解释
app 每次写入前寻位到流结尾
binary 二进制模式打开
in 为读打开
out 为写打开
trunc 在打开时舍弃流的内容
ate 打开后立即寻位到流结尾

注解

常由 std::basic_stringstream 的构造函数调用。

异于 std::ios_base::instd::ios_base::out 的打开模式支持级别在实现中各异。 C++11 显式指定 str() 中和此构造函数中支持 std::ios_base::ate ,但 std::ios_base::appstd::ios_base::truncstd::ios_base::binary 在不同实现上有不同效果。

示例

演示直接调用 basic_stringbuf 的构造函数。

#include <iostream>
#include <sstream>
 
int main()
{
    // 默认构造函数( mode = in|out )
    std::stringbuf buf1;
    buf1.sputc('1');
    std::cout << &buf1 << '\n';
 
    // 在尾端模式中的 string 构造函数 (C++11)
    std::stringbuf buf2("test", std::ios_base::in
                              | std::ios_base::out
                              | std::ios_base::ate);
    buf2.sputc('1');
    std::cout << &buf2 << '\n';
 
    // 后附模式测试(结果在编译器间有别)
    std::stringbuf buf3("test", std::ios_base::in
                              | std::ios_base::out
                              | std::ios_base::app);
    buf3.sputc('1');
    buf3.pubseekpos(1);
    buf3.sputc('2');
    std::cout << &buf3 << '\n';
}

输出:

1
test1
est12 (Sun Studio) 2st1 (GCC)

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR 应用于 出版时的行为 正确行为
P0935R0 C++11 默认构造函数曾为 explicit 使之为隐式

参阅

构造字符串流
(std::basic_stringstream<CharT,Traits,Allocator> 的公开成员函数)