Namensräume
Varianten
Aktionen

std::basic_string<CharT,Traits,Allocator>:operator+=

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
basic_string& operator+=( const basic_string& str );
(1) (constexpr seit C++20)
basic_string& operator+=( CharT ch );
(2) (constexpr seit C++20)
basic_string& operator+=( const CharT* s );
(3) (constexpr seit C++20)
basic_string& operator+=( std::initializer_list<CharT> ilist );
(4) (seit C++11)
(constexpr seit C++20)
template< class StringViewLike >
basic_string& operator+=( const StringViewLike& t );
(5) (seit C++17)
(constexpr seit C++20)

Hängt zusätzliche Zeichen an den String an.

1) Hängt den String str an.
2) Hängt das Zeichen ch an.
3) Hängt den null-terminierten Zeichenstring an, auf den s zeigt.
4) Hängt die Zeichen aus der Initialisierungsliste ilist an.
5) Konvertiert t implizit in eine String-Ansicht sv, als ob durch std::basic_string_view<CharT, Traits> sv = t;, und hängt dann die Zeichen in der String-Ansicht sv an, als ob durch append(sv).
Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn std::is_convertible_v<const StringViewLike&,
                      std::basic_string_view<CharT, Traits>>
true ist und std::is_convertible_v<const StringViewLike&, const CharT*> false ist.

Inhalt

[edit] Parameter

str - anzuhängender String
ch - anzuhängender Zeichenwert
s - Zeiger auf einen null-terminierten Zeichenstring, der angehängt werden soll
ilist - std::initializer_list mit den anzuhängenden Zeichen
t - Objekt (konvertierbar in std::basic_string_view) mit den anzuhängenden Zeichen

[edit] Rückgabewert

*this

[edit] Komplexität

Es gibt keine standardmäßigen Komplexitätsgarantien; typische Implementierungen verhalten sich ähnlich wie std::vector::insert().

[edit] Ausnahmen

Wenn die Operation dazu führen würde, dass size() max_size() überschreitet, wird std::length_error ausgelöst.

Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).

[edit] Hinweise

Überladung (2) kann beliebige Typen akzeptieren, die implizit in CharT konvertierbar sind. Für std::string, bei dem CharT char ist, umfasst die Menge der akzeptablen Typen alle arithmetischen Typen. Dies kann unbeabsichtigte Auswirkungen haben.

[edit] Beispiel

#include <iomanip>
#include <iostream>
#include <string>
 
int main()
{
    std::string str;
 
    // reserve sufficient storage space to avoid memory reallocation
    str.reserve(50);
 
    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 += 69.96; // Equivalent to str += static_cast<char>(69.96);
                  // 'E' (ASCII code 69) is appended by overload (2),
                  // which might not be the intent.
 
    // To add a numeric value, consider std::to_string():
    str += std::to_string(1729);
 
    std::cout << std::quoted(str) << '\n';
}

Ausgabe

""
"This"
"This is "
"This is a"
"This is a string."
"This is a string.E1729"

[edit] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 847 C++98 Es gab keine Ausnahmesicherheitsgarantie starke Ausnahmesicherheitsgarantie hinzugefügt
LWG 2946 C++17 Überladung (5) verursachte Mehrdeutigkeiten in einigen Fällen vermieden durch die Erstellung als Template

[edit] Siehe auch

hängt Zeichen am Ende an
(public member function) [edit]