std::basic_stringbuf::basic_stringbuf

来自cppreference.com
< cpp‎ | io‎ | basic stringbuf
explicit basic_stringbuf( std::ios_base::openmode which = std::ios_base::in
                                                        | std::ios_base::out );
(1)
explicit basic_stringbuf( const std::basic_string<CharT, traits, Allocator>& new_str,

                          std::ios_base::openmode which = std::ios_base::in

                                                        | std::ios_base::out );
(2)
basic_stringbuf( const basic_stringbuf& rhs ) = delete;
(3) (C++11 起)
basic_stringbuf( basic_stringbuf&& rhs );
(4) (C++11 起)
1) 构造 std::basic_stringbuf 对象:通过调用 std::basic_streambuf 的默认构造函数初始化基类,以空字符串初始化字符序列,并设置模式为 which
2) 通过调用同 1) 的初始化构造 std::basic_stringbuf 对象,然后如同以调用 str(new_str) 构造关联字符序列。
3) 复制构造函数被删除: std::basic_stringbuf可复制构造 (CopyConstructible) 。
4) 通过从另一 std::basic_stringbuf 对象 rhs 移动所有状态,包含关联 string 、打开模式、 locale 和所有其他状态,移动构造 std::basic_stringbuf 对象。移动后,保证 *thisstd::basic_streambuf 的六个指针异于被移动的 rhs 中的指针,除非它们为空。

目录

[编辑] 参数

new_str - 用于初始化缓冲区的 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)

[编辑] 参阅

构造字符串流
(std::basic_stringstream 的公开成员函数) [编辑]