std::basic_string<CharT,Traits,Allocator>::basic_string (3) - Linux Manuals
std::basic_string<CharT,Traits,Allocator>::basic_string: std::basic_string<CharT,Traits,Allocator>::basic_string
NAME
std::basic_string<CharT,Traits,Allocator>::basic_string - std::basic_string<CharT,Traits,Allocator>::basic_string
Synopsis
basic_string(); (until C++17)
explicit basic_string( const Allocator& alloc );
basic_string() noexcept(noexcept( Allocator() )): basic_string( Allocator() ) {} (since C++17)
explicit basic_string( const Allocator& alloc ) noexcept;
basic_string( size_type count,
CharT ch, (2)
const Allocator& alloc = Allocator() );
basic_string( const basic_string& other,
size_type pos, (until C++17)
size_type count = std::basic_string::npos,
const Allocator& alloc = Allocator() );
basic_string( const basic_string& other,
size_type pos, (since C++17)
const Allocator& alloc = Allocator() );
basic_string( const basic_string& other,
size_type pos, (since C++17)
size_type count,
const Allocator& alloc = Allocator() );
basic_string( const CharT* s, (1)
size_type count, (4)
const Allocator& alloc = Allocator() );
basic_string( const CharT* s, (3) (5)
const Allocator& alloc = Allocator() );
template< class InputIt >
basic_string( InputIt first, InputIt last, (6)
const Allocator& alloc = Allocator() );
basic_string( const basic_string& other ); (7)
basic_string( const basic_string& other, const Allocator& alloc ); (7) (since C++11)
basic_string( basic_string&& other ) noexcept; (8) (since C++11)
basic_string( basic_string&& other, const Allocator& alloc ); (8) (since C++11)
basic_string( std::initializer_list<CharT> ilist, (9) (since C++11)
const Allocator& alloc = Allocator() );
template < class T > (10) (since C++17)
explicit basic_string( const T& t, const Allocator& alloc = Allocator() );
template < class T >
basic_string( const T& t, size_type pos, size_type n, (11) (since C++17)
const Allocator& alloc = Allocator() );
Constructs new string from a variety of data sources and optionally using user supplied allocator alloc.
1) Default constructor. Constructs empty string (zero size and unspecified capacity). If no allocator is supplied, allocator is obtained from a default-constructed instance.
2) 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)
3) 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()).
4) Constructs the string with the first count characters of character 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.
5) 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)
6) Constructs the string with the contents of the range [first, last).
If InputIt is an integral type, equivalent to basic_string(static_cast<size_type>(first), static_cast<value_type>(last), a) (until C++11)
This constructor only participates in overload resolution if InputIt satisfies LegacyInputIterator. (since C++11)
7) Copy constructor. Constructs the string with the copy of the contents of other.
8) Move constructor. Constructs the string with the contents of other using move semantics. other is left in valid, but unspecified state.
9) Constructs the string with the contents of the initializer list ilist.
10) Implicitly converts t to a string view sv as if by std::basic_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 only participates in overload resolution if std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> is true and std::is_convertible_v<const T&, const CharT*> is false.
11) Implicitly converts t to a string view sv as if by std::basic_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), a). This overload only participates in overload resolution if std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> is true .
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 initialize the string with
Complexity
1) constant
2-4) linear in count
5) linear in length of s
6) linear in distance between first and last
7) linear in size of other
8) constant. If alloc is given and alloc != other.get_allocator(), then linear
9) linear in size of ilist
Exceptions
3) std::out_of_range if pos > other.size()
8) Throws nothing if alloc == str.get_allocator()
11) 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 (2)). Calls to Allocator::allocate may throw.
Notes
Initialization with a string_literal that contains embedded '\0' characters uses the overload (5), which stops at the first null character. This can be avoided by specifying a different constructor or by using operator""s:
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
LWG_2193 C++11 the default constructor is explicit made non-explicit
LWG_2946 C++17 string_view overload causes ambiguity in some cases avoided by making it a template
LWG_3076 C++17 two constructors may cause ambiguities in class template argument deduction constrained
Example
// Run this code
Output: