Skip to main content

std::string operator+=

// (1) Non const version only
constexpr basic_string& operator+=( const basic_string& str );

// (2) Non const version only
constexpr basic_string& operator+=( CharT ch );

// (3) Non const version only
constexpr basic_string& operator+=( const CharT* s );

// (4) Non const version only
constexpr basic_string& operator+=( std::initializer_list<CharT> ilist );

// (5) Non const version only
template < class StringViewLike >
constexpr basic_string& operator+=( 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).
    Overload Resolution

    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

important

This section requires improvement. You can help by editing this doc page.

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

Exceptions

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

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

Notes

caution

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.

Example

Main.cpp
#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"
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.

std::string operator+=

// (1) Non const version only
constexpr basic_string& operator+=( const basic_string& str );

// (2) Non const version only
constexpr basic_string& operator+=( CharT ch );

// (3) Non const version only
constexpr basic_string& operator+=( const CharT* s );

// (4) Non const version only
constexpr basic_string& operator+=( std::initializer_list<CharT> ilist );

// (5) Non const version only
template < class StringViewLike >
constexpr basic_string& operator+=( 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).
    Overload Resolution

    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

important

This section requires improvement. You can help by editing this doc page.

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

Exceptions

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

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

Notes

caution

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.

Example

Main.cpp
#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"
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.