std::basic_string<CharT,Traits,Allocator>::append - cppreference.com (original) (raw)

basic_string& append( size_type count, CharT ch ); (1) (constexpr since C++20)
basic_string& append( const CharT* s, size_type count ); (2) (constexpr since C++20)
basic_string& append( const CharT* s ); (3) (constexpr since C++20)
template< class SV >basic_string& append( const SV& t ); (4) (since C++17) (constexpr since C++20)
template< class SV > basic_string& append( const SV& t, size_type pos, size_type count = npos ); (5) (since C++17) (constexpr since C++20)
basic_string& append( const basic_string& str ); (6) (constexpr since C++20)
(7)
basic_string& append( const basic_string& str, size_type pos, size_type count ); (until C++14)
basic_string& append( const basic_string& str, size_type pos, size_type count = npos ); (since C++14) (constexpr since C++20)
template< class InputIt >basic_string& append( InputIt first, InputIt last ); (8) (constexpr since C++20)
basic_string& append( std::initializer_list<CharT> ilist ); (9) (since C++11) (constexpr since C++20)

Appends additional characters to the string.

  1. Appends count copies of character ch.

  2. Appends characters in the range [s, s + count).

If [s, s + count) is not a valid range, the behavior is undefined.

  1. Equivalent to return append(s, Traits::length(s));.

4,5) Appends characters in a string view sv constructed from t.

  1. Equivalent to std::basic_string_view<CharT, Traits> sv = t;
    return append(sv.data(), sv.size());.

  2. Equivalent to std::basic_string_view<CharT, Traits> sv = t;
    return append(sv.substr(pos, count));.

6,7) Appends characters in another string str.

  1. Equivalent to return append(str.data(), str.size());.
7) Equivalent to return append(std::basic_string_view<CharT, Traits> (str).substr(pos, count));. (since C++20)
  1. Equivalent to return append(basic_string(first, last, get_allocator()));.
This overload has the same effect as overload (1) if InputIt is an integral type. (until C++11)
This overload participates in overload resolution only if InputIt satisfies the requirements of LegacyInputIterator. (since C++11)
  1. Equivalent to return append(ilist.begin(), ilist.size());.

Contents

[edit] Parameters

count - number of characters to append
ch - character value to append
s - pointer to the character string to append
t - object convertible to std::basic_string_view with the characters to append
pos - the index of the first character to append
str - string to append
first, last - range of characters to append
ilist - initializer list with the characters to append

[edit] Return value

*this

[edit] Complexity

There are no standard complexity guarantees, typical implementations behave similar to std::vector::insert().

[edit] Exceptions

If the operation would cause size() to exceed max_size(), throws std::length_error.

If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).

[edit] Example

#include #include   int main() { std::string str = "std::string"; const char* cptr = "C-string"; const char carr[] = "range";   std::string result;   // 1) Append a char 3 times. // Note: This is the only overload accepting “CharT”s. result.append(3, ''); assert(result == "**");   // 2) Append a fixed-length C-string result.append(cptr, 5); assert(result == "***C-str");   // 3) Append a null-terminated C-string // Note: Because “append” returns *this, we can chain calls together. result.append(1, ' ').append(cptr); assert(result == "***C-str C-string");   // 6) Append a whole string result.append(1, ' ').append(str); assert(result == "***C-str C-string std::string");   // 7) Append part of a string result.append(str, 3, 2); assert(result == "***C-str C-string std:🧵:");   // 8) Append range result.append(&carr[2], &carr[3]); assert(result == "***C-str C-string std:🧵:n");   // 9) Append initializer list result.append({'p', 'o', 's'}); assert(result == "***C-str C-string std:🧵:npos"); }

[edit] 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 847 C++98 there was no exception safety guarantee added strong exception safety guarantee
LWG 2250 C++98 the behavior of overload (7) wasundefined if pos > str.size() is true always throws an exception in this case
LWG 2788 C++98 overload (8) used a default constructedallocator to construct the temporary string obtains the allocatorfrom get_allocator()
LWG 2946 C++17 overload (4) causes ambiguity in some cases avoided by making it a template

[edit] See also

append_range(C++23) appends a range of characters to the end (public member function) [edit]
operator+= appends characters to the end (public member function) [edit]
strcat concatenates two strings (function) [edit]
strncat concatenates a certain amount of characters of two strings (function) [edit]
wcscat appends a copy of one wide string to another (function) [edit]
wcsncat appends a certain amount of wide characters from one wide string to another (function) [edit]