std::basic_string::operator=
De cppreference.com
< cpp | string | basic string
(1) | ||
basic_string& operator=(const basic_string& str ); | (hasta C++20) | |
constexpr basic_string& operator=(const basic_string& str ); | (desde C++20) | |
(2) | ||
basic_string& operator=( basic_string&& str ); | (desde C++11) (hasta C++17) | |
basic_string& operator=( basic_string&& str )noexcept(/* véase abajo */); | (desde C++17) (hasta C++20) | |
constexpr basic_string& operator=( basic_string&& str )noexcept(/* véase abajo */); | (desde C++20) | |
(3) | ||
basic_string& operator=(const CharT* s ); | (hasta C++20) | |
constexpr basic_string& operator=(const CharT* s ); | (desde C++20) | |
(4) | ||
basic_string& operator=( CharT ch ); | (hasta C++20) | |
constexpr basic_string& operator=( CharT ch ); | (desde C++20) | |
(5) | ||
basic_string& operator=(std::initializer_list<CharT> ilist ); | (desde C++11) (hasta C++20) | |
constexpr basic_string& operator=(std::initializer_list<CharT> ilist ); | (desde C++20) | |
(6) | ||
template<class T> basic_string& operator=(const T& t ); | (desde C++17) (hasta C++20) | |
template<class T> constexpr basic_string& operator=(const T& t ); | (desde C++20) | |
Reemplaza el contenido de la cadena.
1) Reemplaza el contenido con una copia de
str
. Si *this
y str
son el mismo objeto, esta función no tiene efecto2) Reemplaza el contenido con el de
str
utilizando la semántica de movimiento. str
se encuentra en estado válido pero indefinido después de la operación. Si std::allocator_traits<Allocator>::propagate_on_container_move_assignment() es true, el asignador destino se reemplaza con una copia del asignador fuente. Si es false y los asignadores fuente y destino no se comparan como iguales, el destino no puede tomar propiedad de la memoria fuente y debe asignar cada carácter individualmente, asignando memoria adicional usando su propio asignador a medida que sea necesario. A diferencia de otras asignaciones de movimiento, pueden invalidarse las referencias, punteros, e iteradores a str
.3) Reemplaza el contenido con el de la cadena de caracteres terminada en nulo apuntada por
s
como si fuera mediante assign(s, Traits::length(s)).5) Reemplaza el contenido con el de la lista de inicializadores
ilist
como si fuera mediante assign(ilist.begin(), ilist.size())6) Implícitamente convierte
t
a una vista sobre cadena sv
como si fuera mediante std::basic_string_view<CharT, Traits> sv = t;, entonces reemplaza el contenido con el de sv
como si fuera mediante assign(sv). Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> es true y std::is_convertible_v<const T&, const CharT*> es false..Contenido |
[editar]Parámetros
ch | - | Valor con el cual inicializar los caracteres de la cadena. |
str | - | Cadena a usarse como fuente con la cual inicializar la cadena. |
s | - | Puntero a una cadena de caracteres terminada en nulo con el cual inicializar la cadena. |
ilist | - | std::initializer_list con la cual inicializar la cadena. |
t | - | Objeto convertible a std::basic_string_view con el cual inicializar la cadena. |
[editar]Valor de retorno
*this
[editar]Complejidad
1) Lineal en el tamaño de
str
.2) Lineal en el tamaño de
this
(formalmente, cada CharT
debe ser destruido). Si los asignadores no se comparan como iguales y no se propagan, entonces también lineal en el tamaño de str
(se debe hacer una copia).3) Lineal en el tamaño de
s
.4) Constante.
5) Lineal en el tamaño de
ilist
.[editar]Excepciones
2) Especificación noexcept: (desde C++11)
| (desde C++17) |
Si la operacion resulta en size() > max_size()
, lanza std::length_error.
Si por alguna razón se lanza una excepción, esta función no tiene efecto (garantía de excepción fuerte). | (desde C++11) |
[editar]Ejemplo
Ejecuta este código
#include <string>#include <iostream>#include <iomanip> int main(){std::string str1;std::string str2 {"alpha"}; // (1) operator=( const basic_string& ); str1 = str2;std::cout<<std::quoted(str1)<<' '// "alpha"<<std::quoted(str2)<<'\n';// "alpha" // (2) operator=( basic_string&& ); str1 = std::move(str2);std::cout<<std::quoted(str1)<<' '// "alpha"<<std::quoted(str2)<<'\n';// "" o "alpha" (sin especificar) // (3) operator=( const CharT* ); str1 ="beta";std::cout<<std::quoted(str1)<<'\n';// "beta" // (4) operator=( CharT ); str1 ='!';std::cout<<std::quoted(str1)<<'\n';// "!" // (5) operator=( std::initializer_list<CharT> ); str1 ={'g','a','m','m','a'};std::cout<<std::quoted(str1)<<'\n';// "gamma" // (6) operator=( const T& ); str1 = 35U;// equivalente a str1 = static_cast<char>(35U);std::cout<<std::quoted(str1)<<'\n';// "#" (ASCII = 35)}
Posible salida:
"alpha" "alpha" "alpha" "" "beta" "!" "gamma" "#"
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 2063 | C++11 | Nota no-normativa establecía que swap es unaimplementación válida de la asignación de movimiento | Corregida para soportar asignadores de memoria |
LWG 2946 | C++17 | Sobrecarga de string_view causa ambigüedaden algunos casos | Se evitó haciéndola una plantilla |
[editar]Véase también
Construye una cadena basic_string (función miembro pública) | |
Asigna caracteres a una cadena (función miembro pública) |