Namespaces
Variants

std::experimental::optional<T>:: operator=

From cppreference.net
optional & operator = ( std:: experimental :: nullopt_t ) noexcept ;
(1) (biblioteca fundamentals TS)
optional & operator = ( const optional & other ) ;
(2) (biblioteca fundamentals TS)
optional & operator = ( optional && other ) noexcept ( /* ver más abajo */ ) ;
(3) (biblioteca fundamentals TS)
template < class U >
optional & operator = ( U && value ) ;
(4) (biblioteca fundamentals TS)

Reemplaza el contenido de * this con el contenido de other .

1) Si * this contiene un valor antes de la llamada, el valor contenido es destruido llamando a su destructor como si fuera mediante val - > T :: ~T ( ) . * this no contiene un valor después de esta llamada.
2,3) Asigna el estado de other .
  • Si tanto * this como other no contienen un valor, la función no tiene efecto.
  • Si * this contiene un valor, pero other no, entonces el valor contenido se destruye llamando a su destructor. * this no contiene un valor después de la llamada.
  • Si other contiene un valor, entonces dependiendo de si * this contiene un valor, el valor contenido es inicializado directamente o asignado desde * other (2) o std :: move ( * other ) (3) . Nótese que un optional del que se ha movido todavía contiene un valor .
4) Asignación con forward perfecto solo con decay: dependiendo de si * this contiene un valor antes de la llamada, el valor contenido se inicializa directamente desde std:: forward < U > ( value ) o se asigna desde std:: forward < U > ( value ) . La función no participa en la resolución de sobrecarga a menos que std:: is_same < std:: decay_t < U > , T > :: value sea true .

Contenidos

Parámetros

otro - otro objeto optional cuyo valor contenido asignar
valor - valor a asignar al valor contenido
Requisitos de tipo
-
T debe cumplir con los requisitos de CopyAssignable y CopyConstructible para usar la sobrecarga (2).
-
T debe cumplir con los requisitos de MoveAssignable y MoveConstructible para usar la sobrecarga (3).

Valor de retorno

* this

Excepciones

2-4) Lanza cualquier excepción lanzada por el constructor u operador de asignación de T . Si se lanza una excepción, el estado de inicialización de * this (y de other en el caso de (2)) permanece sin cambios, es decir, si el objeto contenía un valor, sigue conteniendo un valor, y viceversa. Los contenidos de value y los valores contenidos de * this y other dependen de las garantías de seguridad ante excepciones de la operación desde la que se origina la excepción (constructor de copia, asignación de movimiento, etc.).
(3) tiene la siguiente declaración noexcept :
noexcept specification:

Notas

Un objeto opcional op puede convertirse en un optional vacío tanto con op = { } ; como con op = nullopt ; .

Ejemplo

#include <experimental/optional>
#include <iostream>
int main()
{
    std::experimental::optional<const char*> s1 = "abc", s2; // constructor
    s2 = s1; // assignment
    s1 = "def"; // decaying assignment (U = char[4], T = const char*)
    std::cout << *s2 << ' ' << *s1 << '\n';
}

Salida:

abc def

Véase también

construye el valor contenido in-situ
(función miembro pública)