std::basic_string<CharT,Traits,Allocator>::append
basic_string& append( size_type count, CharT ch ); |
(1) | (constexpr seit C++20) |
basic_string& append( const CharT* s, size_type count ); |
(2) | (constexpr seit C++20) |
basic_string& append( const CharT* s ); |
(3) | (constexpr seit C++20) |
template< class SV > basic_string& append( const SV& t ); |
(4) | (seit C++17) (constexpr seit C++20) |
template< class SV > basic_string& append( const SV& t, size_type pos, |
(5) | (seit C++17) (constexpr seit C++20) |
basic_string& append( const basic_string& str ); |
(6) | (constexpr seit C++20) |
| (7) | ||
| basic_string& append( const basic_string& str, size_type pos, size_type count ); |
(bis C++14) | |
basic_string& append( const basic_string& str, size_type pos, size_type count = npos ); |
(seit C++14) (constexpr seit C++20) |
|
template< class InputIt > basic_string& append( InputIt first, InputIt last ); |
(8) | (constexpr seit C++20) |
basic_string& append( std::initializer_list<CharT> ilist ); |
(9) | (seit C++11) (constexpr seit C++20) |
Hängt zusätzliche Zeichen an den String an.
[s, s + count) an.[s, s + count) kein gültiger Bereich ist, ist das Verhalten undefiniert.- std::is_convertible_v<const SV&, std::basic_string_view<CharT, Traits>> ist true.
- std::is_convertible_v<const SV&, const CharT*> ist false.
return append(sv.data(), sv.size());.
return append(sv.substr(pos, count));.
|
7) Entspricht return append(std::basic_string_view<CharT, Traits>
(str).substr(pos, count));. |
(seit C++20) |
|
Diese Überladung hat denselben Effekt wie Überladung (1), wenn |
(bis C++11) |
|
Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn `InputIt` die Anforderungen eines LegacyInputIterator erfüllt. |
(seit C++11) |
Inhalt |
[bearbeiten] Parameter
| zählt | - | Anzahl der anzuhängenden Zeichen |
| ch | - | anzuhängender Zeichenwert |
| s | - | Zeiger auf den anzuhängenden Zeichenstring |
| t | - | Objekt, das in std::basic_string_view konvertierbar ist, mit den anzuhängenden Zeichen |
| pos | - | Der Index des ersten anzuhängenden Zeichens |
| str | - | anzuhängender String |
| first, last | - | Bereich von anzuhängenden Zeichen |
| ilist | - | Initialisierungsliste mit den anzuhängenden Zeichen |
[bearbeiten] Rückgabewert
*this
[bearbeiten] Komplexität
Es gibt keine standardmäßigen Komplexitätsgarantien, typische Implementierungen verhalten sich ähnlich wie std::vector::insert().
[bearbeiten] 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).
[bearbeiten] Beispiel
#include <cassert> #include <string> 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::string::"); // 8) Append range result.append(&carr[2], &carr[3]); assert(result == "***C-str C-string std::string::n"); // 9) Append initializer list result.append({'p', 'o', 's'}); assert(result == "***C-str C-string std::string::npos"); }
[bearbeiten] 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 2250 | C++98 | das Verhalten von Überladung (7) war undefiniert, wenn pos > str.size() true ist |
wirft in diesem Fall immer eine Ausnahme |
| LWG 2788 | C++98 | Überladung (8) verwendete einen standardkonstruierten Allocator zum Konstruieren des temporären Strings |
holt den Allocator von get_allocator() |
| LWG 2946 | C++17 | Überladung (4) verursacht in einigen Fällen Mehrdeutigkeit | vermieden durch die Erstellung als Template |
[bearbeiten] Siehe auch
| (C++23) |
hängt einen Zeichenbereich am Ende an (public member function) |
| hängt Zeichen am Ende an (public member function) | |
| verbindet zwei Strings (Funktion) | |
| verbindet eine bestimmte Anzahl von Zeichen von zwei Strings (Funktion) | |
| hängt eine Kopie einer breiten Zeichenkette an eine andere an (Funktion) | |
| hängt eine bestimmte Anzahl breiter Zeichen von einer breiten Zeichenkette an eine andere an (Funktion) |