std::basic_...stringstream(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

std::basic_stringstream::basic_stringstream πŸ’…

(from the C++ Standard Library manual β€” yes bestie, we're doing constructors today 🫢)

πŸ’– NAME πŸ’–

std::basic_stringstream::basic_stringstream β€” the constructor for std::basic_stringstream, aka how your string stream is born. πŸŽ€

✨ Synopsis ✨

Okay so there are twelve overloads and we are listing every single one, no cap. πŸ‘‘

// (1)
explicit basic_stringstream( std::ios_base::openmode mode =
                                 std::ios_base::in |
                                 std::ios_base::out ); // (until C++11)
explicit basic_stringstream( std::ios_base::openmode mode ); // (since C++11)

// (2) (since C++11)
basic_stringstream()
    : basic_stringstream(std::ios_base::in |
                         std::ios_base::out) {}

// (3)
explicit basic_stringstream
    ( const std::basic_string<CharT, Traits, Allocator>& str,
      std::ios_base::openmode mode =
          std::ios_base::in | std::ios_base::out );

// (4) (since C++20)
explicit basic_stringstream
    ( std::basic_string<CharT, Traits, Allocator>&& str,
      std::ios_base::openmode mode =
          std::ios_base::in | std::ios_base::out );

// (5) (since C++20)
basic_stringstream( std::ios_base::openmode mode, const
    Allocator& a );

// (6) (since C++20)
template< class SAlloc >
basic_stringstream( const std::basic_string<CharT, Traits,
    SAlloc>& str,
    std::ios_base::openmode mode, const
    Allocator& a );

// (7) (since C++20)
template< class SAlloc >
basic_stringstream( const std::basic_string<CharT, Traits,
    SAlloc>& str,
    const Allocator& a )
    : basic_stringstream(str, std::ios_base::in |
        std::ios_base::out, a) {}

// (8) (since C++20)
template< class SAlloc >
explicit basic_stringstream
    ( const std::basic_string<CharT, Traits, SAlloc>& str,
      std::ios_base::openmode mode =
          std::ios_base::in | std::ios_base::out );

// (9) (since C++26)
template< class StringViewLike >
explicit basic_stringstream
    ( const StringViewLike& t,
      std::ios_base::openmode mode =
          std::ios_base::in | std::ios_base::out );

// (10) (since C++26)
template< class StringViewLike >
basic_stringstream( const StringViewLike& t,
    std::ios_base::openmode mode, const
    Allocator& a );

// (11) (since C++26)
template< class StringViewLike >
basic_stringstream( const StringViewLike& t, const Allocator&
    a );

// (12) (since C++11)
basic_stringstream( basic_stringstream&& other );

Constructs new string stream. 🫧

Given

  • base_type as std::basic_iostream<CharT, Traits>, and
  • buf_type as std::basic_stringbuf<CharT, Traits, Allocator>,

the std::basic_iostream base and the exposition-only data member sb are initialized as follows. πŸ‘‡

  • (1) β€” sb: buf_type(mode)
  • (2) β€” sb: buf_type(std::ios_base::in | std::ios_base::out)
  • (3) β€” sb: buf_type(str, mode)
  • (4) β€” std::basic_iostream base: base_type(std::addressof(sb)) [1]; sb: buf_type(std::move(str), mode)
  • (5) β€” sb: buf_type(mode, a)
  • (6) β€” sb: buf_type(str, mode, a)
  • (7) β€” sb: buf_type(str, std::ios_base::in | std::ios_base::out, a)
  • (8) β€” sb: buf_type(str, mode)
  • (9) β€” sb: {t, mode, Allocator()}
  • (10) β€” std::basic_iostream base: std::addressof(sb); sb: {t, mode, a}
  • (11) β€” sb: {t, std::ios_base::in | std::ios_base::out, a}
  • (12) β€” std::basic_iostream base: move constructed from other's std::basic_iostream base; sb: move constructed from other.sb
[1] The std::basic_iostream base was initialized with base_type(&sb) (for overloads (1,3)) until C++11.
  • (8) This overload participates in overload resolution only if std::is_same_v<SAlloc, Allocator> is false.
  • (9-11) These overloads participate in overload resolution only if std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>> is true.

🌸 Parameters 🌸

  • str β€” string to use as initial contents of the string stream.
  • t β€” an object (convertible to std::basic_string_view) to use as initial contents of the string stream.
  • a β€” allocator used for allocating the contents of the string stream.
  • mode β€” specifies stream open mode. It is a BitmaskType, the following constants are defined:
    • 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
    • noreplace (C++23) β€” open in exclusive mode
  • other β€” another string stream to use as source.

πŸ¦‹ Notes πŸ¦‹

Construction of one-off basic_stringstream objects in a tight loop, such as when used for string conversion, may be significantly more costly than calling str() to reuse the same object. So like… don't spam constructors if you can just reuse, bestie. πŸ’Έ

⭐ Feature-test macro ⭐

  • __cpp_lib_sstream_from_string_view β€” value 202306L β€” std (C++26) β€” feature: Interfacing std::stringstreams with std::string_view, (9-11).

πŸ“ Example πŸ“

Run this code, bestie:

#include <iostream>
#include <sstream>

int main()
{
    // default constructor (input/output stream)
    std::stringstream buf1;
    buf1 << 7;
    int n = 0;
    buf1 >> n;
    std::cout << "buf1 = " << buf1.str() << " n = " << n << '\n';

    // input stream
    std::istringstream inbuf("-10");
    inbuf >> n;
    std::cout << "n = " << n << '\n';

    // output stream in append mode (C++11)
    std::ostringstream buf2("test", std::ios_base::ate);
    buf2 << '1';
    std::cout << buf2.str() << '\n';
}

🌈 Output 🌈

buf1 = 7 n = 7
n = -10
test1

🩹 Defect reports 🩹

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

  • P0935R0 β€” applied to C++11 β€” the default constructor was explicit, made implicit.

πŸ‘€ See also πŸ‘€

  • str β€” gets or sets the contents of underlying string device object (public member function).
  • constructor β€” constructs a basic_stringbuf object (public member function of std::basic_stringbuf<CharT,Traits,Allocator>).

xoxo bestie πŸ’– source: http://cppreference.com Β· version/date: 2024.06.10 Β· page: std::basic_...stringstream(3) ✨

πŸ“¦ where this page comes from