Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::basic_...ic_stringbuf(3) C++ Standard Libarystd::basic_...ic_stringbuf(3)

NAME
       std::basic_stringbuf::basic_stringbuf	-    std::basic_stringbuf::ba-
       sic_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-de-
       fined 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 construc-
       tion, 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 construc-
       tion, 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::ba-
       sic_string
	  rhs	- another basic_stringbuf
		  specifies  stream open mode. It is bitmask type, the follow-
       ing 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  af-
       ter 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		  Fea-
       ture
	  __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  di-
       rectly:

       // 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 retroac-
       tively 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	 limi-
       tation
			     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 &		   be-
       yond 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>)

http://cppreference.com		  2024.06.10	 std::basic_...ic_stringbuf(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::stringbuf::basic_stringbuf&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help