| std::basic_stringbuf::basic_stringbuf(3) | C++ Standard Libary | std::basic_stringbuf::basic_stringbuf(3) | 
NAME¶
std::basic_stringbuf::basic_stringbuf - std::basic_stringbuf::basic_stringbuf
Synopsis¶
 explicit basic_stringbuf( std::ios_base::openmode which =
  
   std::ios_base::in | (until C++11)
  
   std::ios_base::out );
  
   explicit basic_stringbuf( std::ios_base::openmode which ); (since
    C++11)
  
   basic_stringbuf()
  
   : basic_stringbuf( std::ios_base::in | std::ios_base::out (2)
    (since C++11)
  
   ) {}
  
   explicit
  
   basic_stringbuf( const std::basic_string<CharT, Traits,
  
   Allocator>& s, (3)
  
   std::ios_base::openmode which =
  
   std::ios_base::in |
  
   std::ios_base::out );
  
   explicit basic_stringbuf( std::basic_string<CharT, Traits,
  
   Allocator>&& s,
  
   std::ios_base::openmode which = (4) (since C++20)
  
   std::ios_base::in |
  
   std::ios_base::out );
  
   basic_stringbuf( std::ios_base::openmode which, const (5) (since
    C++20)
  
   Allocator& a );
  
   explicit basic_stringbuf( const Allocator& a )
  
   : basic_stringbuf( std::ios_base::in | (6) (since C++20)
  
   std::ios_base::out, a ) {}
  
   template< class SAlloc >
  
   explicit basic_stringbuf( const std::basic_string<CharT,
  
   Traits, SAlloc>& s, (7) (since C++20)
  
   std::ios_base::openmode which =
  
   std::ios_base::in |
  
   std::ios_base::out ); (1)
  
   template< class SAlloc >
  
   basic_stringbuf( const std::basic_string<CharT, Traits,
  
   SAlloc>& s, (8) (since C++20)
  
   std::ios_base::openmode which, const
  
   Allocator& a );
  
   template< class SAlloc >
  
   basic_stringbuf( const std::basic_string<CharT, Traits,
  
   SAlloc>& s, (9) (since C++20)
  
   const Allocator& a )
  
   : basic_stringbuf( s, std::ios_base::in |
  
   std::ios_base::out, a ) {}
  
   template< class StringViewLike >
  
   explicit basic_stringbuf( const StringViewLike& t,
  
   std::ios_base::openmode which = (10) (since C++26)
  
   std::ios_base::in |
  
   std::ios_base::out );
  
   template< class StringViewLike >
  
   basic_stringbuf( const StringViewLike& t, (11) (since C++26)
  
   std::ios_base::openmode which, const
  
   Allocator& a );
  
   template< class StringViewLike >
  
   basic_stringbuf( const StringViewLike& t, const Allocator& a
    (12) (since C++26)
  
   );
  
   basic_stringbuf( basic_stringbuf&& rhs ); (13) (since
    C++11)
  
   basic_stringbuf( basic_stringbuf&& rhs, const Allocator& a );
    (14) (since C++20)
  
   basic_stringbuf( const basic_stringbuf& rhs ) = delete; (15)
    (since C++11)
  
   The std::basic_streambuf base and the exposition-only data members buf and
    mode are
  
   initialized as follows.
  
   After initializing these subobjects, overloads (3-12) initialize the input
    and
  
   output sequences as if by calling init_buf_ptrs().
  
   Overload std::basic_streambuf buf mode
  
   base
  
   (1) which
  
   implementation-defined std::ios_base::in |
  
   (2) (see below)
  
   std::ios_base::out
  
   (3) s
  
   (4) std::move(s) which
  
   (5)
  
   a std::ios_base::in |
  
   (6)
  
   default-initialized std::ios_base::out
  
   (7) s which
  
   (8)
  
   {s, a} std::ios_base::in |
  
   (9)
  
   std::ios_base::out
  
   (10) {sv, Allocator()} which
  
   (11)
  
   {sv, a} std::ios_base::in |
  
   (12)
  
   std::ios_base::out
  
   (13) rhs std::move(rhs).str()
  
   (14) (copy constructed) {std::move(rhs).str(), rhs.mode
  
   a}
  
   1,2) Overload
  
   (1)
  
   (until C++11)
  
   (2)
  
   (since C++11) is the default constructor. It is implementation-defined
    whether the
  
   sequence pointers (eback(), gptr(), egptr(), pbase(), pptr(), epptr()) are
  
   initialized to null pointers.
  
   5,6) When the construction is complete, str.empty() is true.
  
   7) This overload participates in overload resolution only if
    std::is_same_v<SAlloc,
  
   Allocator> is false.
  
   10-12) Implicitly converts t to a string view sv as if by
  
   std::basic_string_view<CharT, Traits> sv = t;, then it is used as above
    in the
  
   table.
  
   These overloads participate in overload resolution only if
  
   std::is_convertible_v<const StringViewLike&,
  
   std::basic_string_view<CharT, Traits>> is true.
  
   13,14) Overload (13) is the move constructor. It is
    implementation-defined whether
  
   the six sequence pointers in *this obtain the values which rhs had.
  
   When the construction is complete, rhs is empty but usable, and
  
   * Let rhs_p refer to the state of rhs just prior to this construction, the
  
   following expressions will evaluate to true:
  
   * str() == rhs_p.str()
  
   * getloc() == rhs_p.getloc()
  
   * gptr() - eback() == rhs_p.gptr() - rhs_p.eback()
  
   * egptr() - eback() == rhs_p.egptr() - rhs_p.eback()
  
   * pptr() - pbase() == rhs_p.pptr() - rhs_p.pbase()
  
   * epptr() - pbase() == rhs_p.epptr() - rhs_p.pbase()
  
   * Let rhs_a refer to the state of rhs just after this construction, the
    following
  
   expressions will evaluate to true:
  
   * !eback() || eback() != rhs_a.eback()
  
   * !gptr() || gptr() != rhs_a.gptr()
  
   * !egptr() || egptr() != rhs_a.egptr()
  
   * !pbase() || pbase() != rhs_a.pbase()
  
   * !pptr() || pptr() != rhs_a.pptr()
  
   * !epptr() || epptr() != rhs_a.epptr()
  
   15) The copy constructor is deleted; std::basic_stringbuf is not
    CopyConstructible.
Parameters¶
 s - a std::basic_string used to initialize the buffer
  
   t - an object (convertible to std::basic_string_view) used to initialize the
  
   buffer
  
   a - another allocator used to construct the internal std::basic_string
  
   rhs - another basic_stringbuf
  
   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
  
   which - 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
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.
  
   Feature-test macro Value Std Feature
  
   __cpp_lib_sstream_from_string_view 202306L (C++26) Interfacing string streams
    with
  
   std::string_view
Example¶
Demonstrates calling the constructor of std::basic_stringbuf directly:
// Run this code
  
   #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)
  
   Defect reports
  
   The following behavior-changing defect reports were applied retroactively to
  
   previously published C++ standards.
  
   DR Applied to Behavior as published Correct behavior
  
   1. overload (1) allocated no array object 1. removed the
  
   LWG 432 C++98 2. overload (3) did not specify how the limitation
  
   input 2. specified
  
   and output sequences are initialized
  
   overload (3) set epptr() to point one past
  
   LWG 562 C++98 the last underlying epptr() can be set
  
   character if bool(which & beyond that position
  
   std::ios_base::out) == true
  
   P0935R0 C++11 the default constructor was explicit made implicit
See also¶
 constructs the string stream
  
   constructor (public member function of
  
   std::basic_stringstream<CharT,Traits,Allocator>)
| 2024.06.10 | http://cppreference.com |