std::experimental::optional<T>:: operator=
From es.cppreference.net
<
cpp
|
experimental
|
optional
|
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
(3) tiene la siguiente declaración
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:
noexcept
(
std::
is_nothrow_move_assignable
<
T
>
::
value
&&
std::
is_nothrow_move_constructible
<
T
>
::
value
)
Notas
Un objeto opcional
op
puede convertirse en un optional vacío tanto con
op
=
{
}
;
como con
op
=
nullopt
;
.
Ejemplo
Ejecutar este código
#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) |