std::basic_string<CharT,Traits,Allocator>::append
basic_string& append( size_type count, CharT ch );
|
(1) | (constexpr depuis C++20) |
basic_string& append( const CharT* s, size_type count );
|
(2) | (constexpr depuis C++20) |
basic_string& append( const CharT* s );
|
(3) | (constexpr depuis C++20) |
template< class SV >
basic_string& append( const SV& t );
|
(4) | (depuis C++17) (constexpr depuis C++20) |
template< class SV >
basic_string& append( const SV& t, size_type pos,
size_type count = npos );
|
(5) | (depuis C++17) (constexpr depuis C++20) |
basic_string& append( const basic_string& str );
|
(6) | (constexpr depuis C++20) |
basic_string& append( const basic_string& str,
size_type pos, size_type count );
|
(7) | (jusqu'à C++14) |
basic_string& append( const basic_string& str,
size_type pos, size_type count = npos );
|
(depuis C++14) (constexpr depuis C++20) |
|
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
|
(8) | (constexpr depuis C++20) |
basic_string& append( std::initializer_list<CharT> ilist );
|
(9) | (depuis C++11) (constexpr depuis C++20) |
Ajoute des caractères supplémentaires à la chaîne.
count copies du caractère ch.[s, s + count).[s, s + count) n'est pas un intervalle valide, le comportement est indéfini.return append(s, Traits::length(s));.sv construite à partir de t.
- Si seul
test fourni, tous les caractères desvsont ajoutés. - Si
posest également fourni :- Si
countest égal ànpos, tous les caractères desvà partir depossont ajoutés. - Sinon, les
std::min(count, sv.size() - pos)caractères desvà partir depossont ajoutés.
- Si
std::is_convertible_v<const SV&, std::basic_string_view<CharT, Traits>>esttrue.std::is_convertible_v<const SV&, const CharT*>estfalse.
std::basic_string_view<CharT, Traits> sv = t;return append(sv.data(), sv.size());.std::basic_string_view<CharT, Traits> sv = t;return append(sv.substr(pos, count));.str.
- Si seul
strest fourni, tous ses caractères sont ajoutés. - Si
posest également fourni :- Si
countest égal ànpos, tous les caractères destrà partir depossont ajoutés. - Sinon, les
std::min(count, str.size() - pos)caractères destrà partir depossont ajoutés.
- Si
return append(str.data(), str.size());.|
7) Équivalent à
return append(std::basic_string_view<CharT, Traits>(str).substr(pos, count));. |
(depuis C++20) |
return append(basic_string(first, last, get_allocator()));.
|
Cette surcharge a le même effet que la surcharge (1) si |
(jusqu'à C++11) |
|
Cette surcharge ne participe à la résolution de surcharge que si |
(depuis C++11) |
return append(ilist.begin(), ilist.size());.Paramètres
| count | - | nombre de caractères à ajouter |
| ch | - | valeur du caractère à ajouter |
| s | - | pointeur vers la chaîne de caractères à ajouter |
| t | - | objet convertible en std::basic_string_view avec les caractères à ajouter |
| pos | - | index du premier caractère à ajouter |
| str | - | chaîne à ajouter |
| first, last | - | plage de caractères à ajouter |
| ilist | - | liste d'initialisation avec les caractères à ajouter |
Valeur de retour
* this
Complexité
Il n'existe aucune garantie de complexité standard, les implémentations typiques se comportent de manière similaire à std::vector::insert() .
Exceptions
Si l'opération devait entraîner le dépassement de
size()
au-delà de
max_size()
, lève
std::length_error
.
Si une exception est levée pour quelque raison que ce soit, cette fonction n'a aucun effet ( garantie forte de sûreté face aux exceptions ).
Exemple
#include <cassert> #include <string> int main() { std::string str = "std::string"; const char* cptr = "C-string"; const char carr[] = "range"; std::string result; // 1) Ajouter un caractère 3 fois. // Note : C'est la seule surcharge acceptant les « CharT ». result.append(3, '*'); assert(result == "***"); // 2) Ajouter une chaîne C de longueur fixe result.append(cptr, 5); assert(result == "***C-str"); // 3) Ajouter une chaîne C terminée par un caractère nul // Note : Comme « append » retourne *this, nous pouvons enchaîner les appels. result.append(1, ' ').append(cptr); assert(result == "***C-str C-string"); // 6) Ajouter une chaîne entière result.append(1, ' ').append(str); assert(result == "***C-str C-string std::string"); // 7) Ajouter une partie d'une chaîne result.append(str, 3, 2); assert(result == "***C-str C-string std::string::"); // 8) Ajouter une plage result.append(&carr[2], &carr[3]); assert(result == "***C-str C-string std::string::n"); // 9) Ajouter une liste d'initialisation result.append({'p', 'o', 's'}); assert(result == "***C-str C-string std::string::npos"); }
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 847 | C++98 | il n'y avait aucune garantie de sécurité des exceptions | garantie de sécurité forte des exceptions ajoutée |
| LWG 2250 | C++98 |
le comportement de la surcharge
(7)
était
indéfini si pos > str. size ( ) est true |
lève toujours une exception dans ce cas |
| LWG 2788 | C++98 |
la surcharge
(8)
utilisait un allocateur construit par défaut
pour construire la chaîne temporaire |
obtient l'allocateur
à partir de get_allocator() |
| LWG 2946 | C++17 | la surcharge (4) provoque une ambiguïté dans certains cas | évitée en la rendant template |
Voir aussi
|
(C++23)
|
ajoute une plage de caractères à la fin
(fonction membre publique) |
|
ajoute des caractères à la fin
(fonction membre publique) |
|
|
concatène deux chaînes de caractères
(fonction) |
|
|
concatène un certain nombre de caractères de deux chaînes
(fonction) |
|
|
ajoute une copie d'une chaîne large à une autre
(fonction) |
|
|
ajoute un certain nombre de caractères larges d'une chaîne large à une autre
(fonction) |