Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: operator=

From cppreference.net
std::basic_string
basic_string & operator = ( const basic_string & str ) ;
(1) (constexpr desde C++20)
basic_string & operator = ( basic_string && str )
noexcept ( /* ver más abajo */ ) ;
(2) (desde C++11)
(constexpr desde C++20)
basic_string & operator = ( const CharT * s ) ;
(3) (constexpr desde C++20)
basic_string & operator = ( CharT ch ) ;
(4) (constexpr desde C++20)
basic_string & operator = ( std:: initializer_list < CharT > ilist ) ;
(5) (desde C++11)
(constexpr desde C++20)
template < class StringViewLike >
basic_string & operator = ( const StringViewLike & t ) ;
(6) (desde C++17)
(constexpr desde C++20)
basic_string & operator = ( std:: nullptr_t ) = delete ;
(7) (desde C++23)

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 asignación por movimiento de SequenceContainer .
A diferencia de otras asignaciones de movimiento de contenedores de secuencia, las referencias, punteros e iteradores a elementos de str pueden quedar invalidados.
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 inicialización ilist como si fuera mediante assign ( ilist. begin ( ) , ilist. size ( ) ) .
6) Convierte implícitamente t a una vista de cadena sv como si fuera mediante std:: basic_string_view < CharT, Traits > sv = t ; , luego reemplaza el contenido con el de sv como si fuera mediante assign ( sv ) .
Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_convertible_v < const StringViewLike & ,
std:: basic_string_view < CharT, Traits >>
es true y std:: is_convertible_v < const StringViewLike & , const CharT * > es false .
7) std::basic_string no puede ser asignado desde nullptr .

Contenidos

Parámetros

ch - valor para inicializar los caracteres de la cadena
str - cadena a utilizar como fuente para inicializar la cadena
s - puntero a una cadena de caracteres terminada en nulo para usar como fuente para inicializar la cadena
ilist - std::initializer_list para inicializar la cadena
t - objeto convertible a std::basic_string_view para inicializar la cadena

Valor de retorno

* this

Complejidad

1) Lineal en tamaño de str .
2) Lineal en el tamaño de * this (formalmente, cada CharT debe ser destruido). Si los asignadores de memoria no son iguales y no se propagan, entonces también lineal en el tamaño de str (debe hacerse una copia).
3) Lineal en tamaño de s .
4) Constante.
5) Lineal en tamaño de ilist .
6) Lineal en tamaño de t .

Excepciones

2)
noexcept especificación:
noexcept ( std:: allocator_traits < Allocator > ::

propagate_on_container_move_assignment :: value ||

std:: allocator_traits < Allocator > :: is_always_equal :: value )

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 <iomanip>
#include <iostream>
#include <string>
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'; // "" or "alpha" (unspecified)
    // (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; // equivalent to str1 = static_cast<char>(35U);
    std::cout << std::quoted(str1) << '\n'; // "#" (ASCII = 35)
}

Salida posible:

"alpha" "alpha"
"alpha" ""
"beta"
"!"
"gamma"
"#"

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 2063 C++11 el operador de asignación de movimiento no seguía
SequenceContainer el requisito semántico de
sigue
LWG 2946 C++17 la sobrecarga ( 6 ) causaba ambigüedad en algunos casos evitada al convertirla en plantilla

Véase también

construye un basic_string
(función miembro pública)
asigna caracteres a una cadena
(función miembro pública)
asigna una vista
(función miembro pública de std::basic_string_view<CharT,Traits> )