Espacios de nombres
Variantes
Acciones

std::basic_string::operator=

De cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::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 efecto
2) 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)).
4) Reemplaza el contenido con el carácter ch como si fuera mediante assign(std::addressof(ch), 1).
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)
noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value
 ||std::allocator_traits<Allocator>::is_always_equal::value)
(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

#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 una
implementació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üedad
en algunos casos
Se evitó haciéndola una plantilla

[editar]Véase también

Construye una cadena basic_string
(función miembro pública)[editar]
Asigna caracteres a una cadena
(función miembro pública)[editar]
close