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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::basic_string::basic_string - std::basic_string::basic_string

Synopsis
	  basic_string();
       (until C++17)
	  basic_string()		       noexcept(noexcept(Allocator()))
       (since C++17)
	      :		basic_string(	      Allocator()	  )	    {}
       (constexpr since
									      C++20)
									      (noex-
       cept since
	  explicit  basic_string(  const Allocator& alloc );		   (2)
       C++17)
									      (con-
       stexpr since
									      C++20)
	  basic_string(	size_type count, CharT	ch,			   (3)
       (constexpr since
			const	 Allocator&    alloc	=    Allocator()    );
       C++20)
	  basic_string(	const basic_string& other, size_type  pos,	   (4)
       (constexpr since
			const	 Allocator&    alloc	=    Allocator()    );
       C++20)
	  constexpr basic_string( basic_string&& other,	size_type
	  pos,								   (5)
       (since C++23)
				  const	Allocator& alloc =
	  Allocator() );
	  basic_string(	const basic_string& other,

			size_type  pos,	 size_type count,		   (6)
       (since C++23)

			const Allocator& alloc = Allocator() );
	  constexpr basic_string( basic_string&& other,

				  size_type pos, size_type  count,	   (7)
       (since C++23)

				  const	Allocator& alloc =
	  Allocator() );
	  basic_string(	 const	CharT* s, size_type count,		   (8)
       (constexpr since
			const	 Allocator&    alloc	=    Allocator()    );
       C++20)
	  basic_string(	 const	CharT* s, const	Allocator& alloc =	   (9)
       (constexpr since
	  Allocator()							    );
       C++20)
	  template< class InputIt >
									      (con-
       stexpr since
	  basic_string(	 InputIt first,	InputIt	last,		      (1) (10)
       C++20)

			const Allocator& alloc = Allocator() );
	  basic_string(	const basic_string& other );			  (11)
       (constexpr since
									      C++20)
	  basic_string(	   const   basic_string&   other,   const   Allocator&
       (since C++11)
	  alloc	);							  (12)
       (constexpr since
									      C++20)
									      (since
       C++11)
	  basic_string(	 basic_string&&	other )	noexcept;		  (13)
       (constexpr since
									      C++20)
	  basic_string(	  basic_string&&   other,   const   Allocator&	 alloc
       (since C++11)
	  );								  (14)
       (constexpr since
									      C++20)
	  basic_string(		 std::initializer_list<CharT>		ilist,
       (since C++11)
			const  Allocator& alloc	= Allocator() );	  (15)
       (constexpr since
									      C++20)
	  template< class StringViewLike >
									      (since
       C++17)
	  explicit basic_string( const StringViewLike& t,		  (16)
       (constexpr since
									      C++20)
				 const Allocator& alloc	=
	  Allocator() );
	  template< class StringViewLike >
									      (since
       C++17)
	  basic_string(	 const StringViewLike& t, size_type pos,	  (17)
       (constexpr since
	  size_type							    n,
       C++20)

			const Allocator& alloc = Allocator() );
	  basic_string(	 std::nullptr_t	) = delete;			  (18)
       (since C++23)
	  template< container-compatible-range<CharT> R	>

	  constexpr basic_string( std::from_range_t, R&& rg,		  (19)
       (since C++23)

				  const	Allocator& = Allocator());

	  Constructs  new string from a	variety	of data	sources	and optionally
       using user
	  supplied allocator alloc.

	  1,2) Default constructor. Constructs empty string (of	zero size  and
       unspecified
	  capacity). If	no allocator is	supplied, allocator is obtained	from a
	  default-constructed instance.
	  3) Constructs	the string with	count copies of	character ch.
	  This	constructor  is	not used for class template argument deduction
       if the Allocator
	  type that would be deduced does not qualify as an allocator.
	  (since C++17)
	  4-7) Constructs the string with a substring [pos, pos	 +  count)  of
       other. If count ==
	  npos,	if count is not	specified, or if the requested substring lasts
       past the	end of
	  the string, the resulting substring is [pos, other.size()).
	  If  other is an rvalue reference, it is left in a valid but unspeci-
       fied state.
	  (since C++23)
	  8) Constructs	the string with	the first count	characters of  charac-
       ter string pointed
	  to  by s. s can contain null characters. The length of the string is
       count. The
	  behavior is undefined	if [s, s + count) is not a valid range.
	  9) Constructs	the string with	the contents initialized with  a  copy
       of the
	  null-terminated  character string pointed to by s. The length	of the
       string is
	  determined by	the first null character. The behavior is undefined if
       [s, s +
	  Traits::length(s)) is	not a valid range (for example,	if s is	a null
       pointer).
	  This constructor is not used for class template  argument  deduction
       if the Allocator
	  type that would be deduced does not qualify as an allocator.
	  (since C++17)
	  10)  Constructs  the	string	with the contents of the range [first,
       last).

	  If InputIt is	an integral type, equivalent to	overload (2), as if by
	  basic_string(static_cast<size_type>(first),
       (until C++11)
		       static_cast<value_type>(last), alloc).
	  This constructor only	participates in	overload resolution if InputIt
       (since C++11)
	  satisfies LegacyInputIterator.

	  11,12) Copy constructor. Constructs the string with a	 copy  of  the
       contents	of other.
	  13,14)  Move constructor. Constructs the string with the contents of
       other using move
	  semantics. other is left in valid, but unspecified state.
	  15) Constructs the string with the contents of the initializer  list
       ilist.
	  16)  Implicitly  converts  t	to  a string view sv as	if by std::ba-
       sic_string_view<CharT,
	  Traits> sv = t;, then	initializes the	string with  the  contents  of
       sv, as if by
	  basic_string(sv.data(), sv.size(), alloc).
	  This overload	participates in	overload resolution only if
	  std::is_convertible_v<const StringViewLike&,
				std::basic_string_view<CharT, Traits>> is true
       and
	  std::is_convertible_v<const StringViewLike&, const CharT*> is	false.
	  17)  Implicitly  converts  t	to  a string view sv as	if by std::ba-
       sic_string_view<CharT,
	  Traits> sv = t;, then	initializes the	string with the	subrange [pos,
       pos + n)	of sv
	  as if	by basic_string(sv.substr(pos, n), alloc).
	  This overload	participates in	overload resolution only if
	  std::is_convertible_v<const StringViewLike&,
				std::basic_string_view<CharT,	Traits>>    is
       true.
	  18) std::basic_string	cannot be constructed from nullptr.
	  19) Constructs the string with the values contained in the range rg.

Parameters
	  alloc	       -  allocator  to	use for	all memory allocations of this
       string
	  count	      -	size of	the resulting string
	  ch	      -	value to initialize the	string with
	  pos	      -	position of the	first character	to include
	  first, last -	range to copy the characters from
	  s	      -	pointer	to an array of characters to use as source  to
       initialize the
			string with
	  other	       -  another  string  to  use as source to	initialize the
       string with
	  ilist	      -	std::initializer_list to initialize the	string with
	  t	      -	object (convertible to std::basic_string_view) to ini-
       tialize the
			string with
	  rg	      -	a container compatible range

Complexity
	  1,2) Constant.
	  3-8) Linear in count.
	  9) Linear in length of s.
	  10) Linear in	distance between first and last.
	  11,12) Linear	in size	of other.
	  13) Constant.
	  14) Constant.	If alloc is given and alloc !=	other.get_allocator(),
       then linear.
	  15) Linear in	size of	ilist.
	  16) Linear in	size of	t.
	  17) Linear in	size of	assigned substring, i.e. std::min(std::size(t)
       - pos, n).
	  19) Linear in	size of	rg.

Exceptions
	  4-7) std::out_of_range if pos	> other.size().
	  13) Throws nothing.
	  14) Throws nothing if	alloc == str.get_allocator().
	  17) std::out_of_range	if pos is out of range.

	  Throws  std::length_error  if	 the  length of	the constructed	string
       would exceed
	  max_size() (for example, if count > max_size() for (3)). Calls to
	  Allocator::allocate may throw.

	  If an	exception is thrown for	any reason, these  functions  have  no
       effect (strong
	  exception safety guarantee).

Notes
	  Initialization  with	a  string  literal that	contains embedded '\0'
       characters uses the
	  overload (9),	which stops at the first null character. This  can  be
       avoided by
	  specifying a different constructor or	by using operator""s:

	std::string s1 = "ab\0\0cd";   // s1 contains "ab"
	std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd"
	std::string s3 = "ab\0\0cd"s;  // s3 contains "ab\0\0cd"

	      Feature-test macro       Value	Std		      Feature
	  __cpp_lib_containers_ranges  202202L (C++23) Tagged constructor (19)
       to construct
						      from container  compati-
       ble range

Example
       // Run this code

	#include <cassert>
	#include <cctype>
	#include <iomanip>
	#include <iostream>
	#include <iterator>
	#include <string>

	int main()
	{
	    std::cout << "1) string(); ";
	    std::string	s1;
	    assert(s1.empty() && (s1.length() == 0) && (s1.size() == 0));
	    std::cout  <<  "s1.capacity():  " << s1.capacity() << '\n';	// un-
       specified

	    std::cout << "2) string(size_type count, CharT ch):	";
	    std::string	s2(4, '=');
	    std::cout << std::quoted(s2) << '\n'; // "===="

	    std::cout  <<  "3)	string(const  string&  other,  size_type  pos,
       size_type count): ";
	    std::string	const other3("Exemplary");
	    std::string	s3(other3, 0, other3.length() -	1);
	    std::cout << std::quoted(s3) << '\n'; // "Exemplar"

	    std::cout << "4) string(const string& other, size_type pos): ";
	    std::string	const other4("Mutatis Mutandis");
	    std::string	s4(other4, 8);
	    std::cout << std::quoted(s4) << '\n'; // "Mutandis", i.e. [8, 16)

	    std::cout << "5) string(CharT const* s, size_type count): ";
	    std::string	s5("C-style string", 7);
	    std::cout << std::quoted(s5) << '\n'; // "C-style",	i.e. [0, 7)

	    std::cout << "6) string(CharT const* s): ";
	    std::string	s6("C-style\0string");
	    std::cout << std::quoted(s6) << '\n'; // "C-style"

	    std::cout << "7) string(InputIt first, InputIt last): ";
	    char mutable_c_str[] = "another C-style string";
	    std::string	  s7(std::begin(mutable_c_str)	 +  8,	std::end(muta-
       ble_c_str) - 1);
	    std::cout << std::quoted(s7) << '\n'; // "C-style string"

	    std::cout << "8) string(string&): ";
	    std::string	const other8("Exemplar");
	    std::string	s8(other8);
	    std::cout << std::quoted(s8) << '\n'; // "Exemplar"

	    std::cout << "9) string(string&&): ";
	    std::string	s9(std::string("C++ by ") + std::string("example"));
	    std::cout << std::quoted(s9) << '\n'; // "C++ by example"

	    std::cout << "a) string(std::initializer_list<CharT>): ";
	    std::string	sa({'C', '-', 's', 't',	'y', 'l', 'e'});
	    std::cout << std::quoted(sa) << '\n'; // "C-style"

	    // before C++11, overload resolution selects string(InputIt	first,
       InputIt last)
	    // [with InputIt = int] which  behaves  *as	 if*  string(size_type
       count, CharT ch)
	    //	after  C++11  the InputIt constructor is disabled for integral
       types and calls:
	    std::cout << "b) string(size_type count, CharT ch) is called: ";
	    std::string	sb(3, std::toupper('a'));
	    std::cout << std::quoted(sb) << '\n'; // "AAA"

	//  std::string	sc(nullptr); //	Before C++23: throws std::logic_error
				     //	Since C++23: won't compile, see	 over-
       load (18)
	//   std::string  sc(0);  //  Same  as	above,	as literal 0 is	a null
       pointer constant

	    auto const range = {0x43, 43, 43};
	#ifdef __cpp_lib_containers_ranges
	    std::string	sc(std::from_range, range); // tagged constructor (19)
	    std::cout << "c) string(std::from_range, range) is called: ";
	#else
	    std::string	sc(range.begin(), range.end());	// fallback  to	 over-
       load (12)
	    std::cout << "c) string(range.begin(), range.end())	is called: ";
	#endif
	    std::cout << std::quoted(sc) << '\n'; // "C++"
	}

Possible output:
	1) string(); s1.capacity(): 15
	2) string(size_type count, CharT ch): "===="
	3) string(const	string&	other, size_type pos, size_type	count):	"Exem-
       plar"
	4) string(const	string&	other, size_type pos): "Mutandis"
	5) string(CharT	const* s, size_type count): "C-style"
	6) string(CharT	const* s): "C-style"
	7) string(InputIt first, InputIt last):	"C-style string"
	8) string(string&): "Exemplar"
	9) string(string&&): "C++ by example"
	a) string(std::initializer_list<CharT>): "C-style"
	b) string(size_type count, CharT ch) is	called:	"AAA"
	c) string(std::from_range, range) is called: "C++"

	  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
			      overload (10) did	not use	the
	  LWG 301  C++98      parameter				use that para-
       meter
			      alloc if InputIt is an integral
			      type
	  LWG  847   C++98	there was no exception safety	  added	strong
       exception safety
			      guarantee				guarantee
	  LWG 2193 C++11      the default constructor is	 made  non-ex-
       plicit
			      explicit
			      there  is	 no  way  to supply an	    there is a
       constructor for
	  LWG	2583	C++98	      allocator				   ba-
       sic_string(str, pos, alloc)
			      for basic_string(str, pos)
	  LWG  2946  C++17	 overload  (16)	causes ambiguity in avoided by
       making it a
			      some cases			template
			      two constructors may cause
	  LWG 3076 C++17      ambiguities			constrained
			      in class template	argument
			      deduction

See also
	  assign	assign characters to a string
			(public	member function)
	  operator=	assigns	values to the string
			(public	member function)
	  to_string	converts an integral or	floating-point value to	string
	  (C++11)	(function)
	  to_wstring	 converts  an  integral	 or  floating-point  value  to
       wstring
	  (C++11)	(function)
			constructs a basic_string_view
	  constructor	    (public	member	   function	of    std::ba-
       sic_string_view<CharT,Traits>)

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

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

home | help