std::basic_stringbuf::basic_stringbuf

From cppreference.com
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) (since C++11)
basic_stringbuf(basic_stringbuf&& rhs);
(4) (since C++11)
1) Constructs a std::basic_stringbuf object: initializes the base class by calling the default constructor of std::basic_streambuf, initializes the character sequence with an empty string, and sets the mode to which.
2) Constructs a std::basic_stringbuf object by performing the same initialization as 1), followed by initializing the associated character sequence as if by calling str(new_str).
3) The copy constructor is deleted; std::basic_stringbuf is not CopyConstructible
4) Move-constructs a std::basic_stringbuf object by moving all state from another std::basic_stringbuf object rhs, including the associated string, the open mode, the locale, and all other state. After the move, the six pointers of std::basic_streambuf in *this are guaranteed to be different from the corresponding pointers in the moved-from rhs unless null.

Contents

[edit] Parameters

new_str - a basic_string used to initialize the buffer
rhs - another basic_stringbuf
mode - specifies stream open mode. It is bitmask type, the following constants are defined:
Constant Explanation
app seek to the end of stream before each write
binary open in binary mode
in open for reading
out open for writing
trunc discard the contents of the stream when opening
ate seek to the end of stream immediately after open

[edit] Notes

Typically called by the constructor of std::basic_stringstream.

The level of support for the open modes other than std::ios_base::in and std::ios_base::out varies among implementations. C++11 explicitly specifies the support for std::ios_base::ate in str() and in this constructor, but std::ios_base::app, std::ios_base::trunc, and std::ios_base::binary have different effects on different implementations.

[edit] Example

Demonstrates calling the constructor of basic_stringbuf directly.

#include <iostream>
#include <sstream>
int main()
{
    // default constructor (mode = in|out)
    std::stringbuf buf1;
    buf1.sputc('1');
    std::cout << &buf1 << '\n';
 
    // string constructor in at-end mode (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';
 
    // append mode test (results differ among compilers)
    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';
}

Output:

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

[edit] See also

constructs the string stream
(public member function of std::basic_stringstream)