std::basic_string<CharT,Traits,Allocator>::append
basic_string& append( size_type count, CharT ch );
|
(1) | (constexpr desde C++20) |
basic_string& append( const CharT* s, size_type count );
|
(2) | (constexpr desde C++20) |
basic_string& append( const CharT* s );
|
(3) | (constexpr desde C++20) |
template< class SV >
basic_string& append( const SV& t );
|
(4) | (desde C++17) (constexpr desde C++20) |
template< class SV >
basic_string& append( const SV& t, size_type pos,
size_type count = npos );
|
(5) | (desde C++17) (constexpr desde C++20) |
basic_string& append( const basic_string& str );
|
(6) | (constexpr desde C++20) |
basic_string& append( const basic_string& str,
size_type pos, size_type count );
|
(7) | (hasta C++14) |
basic_string& append( const basic_string& str,
size_type pos, size_type count = npos );
|
(desde C++14) (constexpr desde C++20) |
|
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
|
(8) | (constexpr desde C++20) |
basic_string& append( std::initializer_list<CharT> ilist );
|
(9) | (desde C++11) (constexpr desde C++20) |
Añade caracteres adicionales a la cadena.
count copias del carácter ch.[s, s + count).[s, s + count) no es un rango válido, el comportamiento no está definido.return append(s, Traits::length(s));.sv construida a partir de t.
- Si solo se proporciona
t, se añaden todos los caracteres desv. - Si también se proporciona
pos:- Si
countesnpos, se añaden todos los caracteres desva partir depos. - En caso contrario, se añaden los
std::min(count, sv.size() - pos)caracteres desva partir depos.
- Si
std::is_convertible_v<const SV&, std::basic_string_view<CharT, Traits>>estrue.std::is_convertible_v<const SV&, const CharT*>esfalse.
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 solo se proporciona
str, se añaden todos sus caracteres. - Si también se proporciona
pos:- Si
countesnpos, se añaden todos los caracteres destra partir depos. - En caso contrario, se añaden los
std::min(count, str.size() - pos)caracteres destra partir depos.
- Si
return append(str.data(), str.size());.|
7) Equivalente a
return append(std::basic_string_view<CharT, Traits>(str).substr(pos, count));. |
(desde C++20) |
return append(basic_string(first, last, get_allocator()));.
|
Esta sobrecarga tiene el mismo efecto que la sobrecarga (1) si |
(hasta C++11) |
|
Esta sobrecarga solo participa en la resolución de sobrecargas si |
(desde C++11) |
return append(ilist.begin(), ilist.size());.Parámetros
| count | - | número de caracteres a añadir |
| ch | - | valor del carácter a añadir |
| s | - | puntero a la cadena de caracteres a añadir |
| t | - | objeto convertible a std::basic_string_view con los caracteres a añadir |
| pos | - | índice del primer carácter a añadir |
| str | - | cadena a añadir |
| first, last | - | rango de caracteres a añadir |
| ilist | - | lista de inicialización con los caracteres a añadir |
Valor de retorno
* this
Complejidad
No hay garantías estándar de complejidad, las implementaciones típicas se comportan de manera similar a std::vector::insert() .
Excepciones
Si la operación causara que
size()
exceda
max_size()
, lanza
std::length_error
.
Si se lanza una excepción por cualquier razón, esta función no tiene efecto ( strong exception safety guarantee ).
Ejemplo
#include <cassert> #include <string> int main() { std::string str = "std::string"; const char* cptr = "C-string"; const char carr[] = "range"; std::string result; // 1) Añadir un carácter 3 veces. // Nota: Esta es la única sobrecarga que acepta "CharT". result.append(3, '*'); assert(result == "***"); // 2) Añadir una cadena C de longitud fija result.append(cptr, 5); assert(result == "***C-str"); // 3) Añadir una cadena C terminada en nulo // Nota: Como "append" devuelve *this, podemos encadenar llamadas. result.append(1, ' ').append(cptr); assert(result == "***C-str C-string"); // 6) Añadir una cadena completa result.append(1, ' ').append(str); assert(result == "***C-str C-string std::string"); // 7) Añadir parte de una cadena result.append(str, 3, 2); assert(result == "***C-str C-string std::string::"); // 8) Añadir rango result.append(&carr[2], &carr[3]); assert(result == "***C-str C-string std::string::n"); // 9) Añadir lista de inicialización result.append({'p', 'o', 's'}); assert(result == "***C-str C-string std::string::npos"); }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 847 | C++98 | no existía garantía de seguridad de excepciones | se añadió garantía de seguridad de excepciones fuerte |
| LWG 2250 | C++98 |
el comportamiento de la sobrecarga
(7)
era
indefinido si pos > str. size ( ) es true |
siempre lanza una excepción en este caso |
| LWG 2788 | C++98 |
la sobrecarga
(8)
usaba un asignador construido por defecto
para construir la cadena temporal |
obtiene el asignador
de get_allocator() |
| LWG 2946 | C++17 | la sobrecarga (4) causa ambigüedad en algunos casos | evitado al convertirla en plantilla |
Véase también
|
(C++23)
|
agrega un rango de caracteres al final
(función miembro pública) |
|
agrega caracteres al final
(función miembro pública) |
|
|
concatena dos cadenas
(función) |
|
|
concatena una cantidad determinada de caracteres de dos cadenas
(función) |
|
|
agrega una copia de una cadena ancha a otra
(función) |
|
|
agrega una cantidad determinada de caracteres anchos de una cadena ancha a otra
(función) |