std::basic_string<CharT,Traits,Allocator>:operator+=
| 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.
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) |