Scroll to navigation

std::basic_string::operator+=(3) C++ Standard Libary std::basic_string::operator+=(3)

NAME

std::basic_string::operator+= - std::basic_string::operator+=

Synopsis


basic_string& operator+=( const (until
basic_string& str ); C++20)
constexpr basic_string& operator+=( (since
const basic_string& str ); C++20)
basic_string& operator+=( CharT ch (until
); C++20)
constexpr basic_string& operator+=( (since
CharT ch ); C++20)
basic_string& operator+=( const (until
CharT* s ); C++20)
constexpr basic_string& operator+=( (since
const CharT* s ); C++20)
basic_string& operator+=( (1) (since
std::initializer_list<CharT> ilist C++11)
); (2) (until
C++20)
constexpr basic_string& operator+=( (3) (since
std::initializer_list<CharT> ilist C++20)
); (4)
template < class StringViewLike > (since
basic_string& operator+=( const C++17)
StringViewLike& t ); (until
(5) C++20)
template < class StringViewLike > (since
constexpr basic_string& operator+=( C++20)
const StringViewLike& t );


Appends additional characters to the string.


1) Appends string str
2) Appends character ch
3) Appends the null-terminated character string pointed to by s.
4) Appends characters in the initializer list ilist.
5) Implicitly converts t to a string view sv as if by std::basic_string_view<CharT,
Traits> sv = t;, then appends characters in the string view sv as if by append(sv).
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.

Parameters


str - string to append
ch - character value to append
s - pointer to a null-terminated character string to append
ilist - std::initializer_list with the characters to append
t - object (convertible to std::basic_string_view) with the characters to append

Return value


*this

Complexity


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

Exceptions


If an exception is thrown for any reason, this function has no effect (strong
exception guarantee).
(since C++11)


If the operation would result in size() > max_size(), throws std::length_error.

Notes


Overload (2) can accept any types that are implicitly convertible to CharT. For
std::string, where CharT is char, the set of acceptable types includes all
arithmetic types. This may have unintended effects.


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 2946 C++17 string_view overload causes ambiguity in avoided by making it a
some cases template

Example

// Run this code


#include <iostream>
#include <iomanip>
#include <string>


int main()
{
std::string str;
str.reserve(50); //reserves sufficient storage space to avoid memory reallocation
std::cout << std::quoted(str) << '\n'; //empty string


str += "This";
std::cout << std::quoted(str) << '\n';


str += std::string(" is ");
std::cout << std::quoted(str) << '\n';


str += 'a';
std::cout << std::quoted(str) << '\n';


str += {' ','s','t','r','i','n','g','.'};
std::cout << std::quoted(str) << '\n';


str += 76.85; // equivalent to str += static_cast<char>(76.85), might not be the intent
std::cout << std::quoted(str) << '\n';
}

Output:


""
"This"
"This is "
"This is a"
"This is a string."
"This is a string.L"

See also


append appends characters to the end
(public member function)

2022.07.31 http://cppreference.com