std::experimental::optional<T>:: operator=
From de.cppreference.net
<
cpp
|
experimental
|
optional
|
optional
&
operator
=
(
std::
experimental
::
nullopt_t
)
noexcept
;
|
(1) | (Library Fundamentals TS) |
|
optional
&
operator
=
(
const
optional
&
other
)
;
|
(2) | (Library Fundamentals TS) |
|
optional
&
operator
=
(
optional
&&
other
)
noexcept
(
/* siehe unten */
)
;
|
(3) | (Library Fundamentals TS) |
|
template
<
class
U
>
optional & operator = ( U && value ) ; |
(4) | (Library Fundamentals TS) |
Ersetzt den Inhalt von * this durch den Inhalt von other .
1)
Wenn
*
this
vor dem Aufruf einen Wert enthält, wird der enthaltene Wert zerstört, indem sein Destruktor aufgerufen wird, als ob durch
val
-
>
T
::
~T
(
)
.
*
this
enthält nach diesem Aufruf keinen Wert.
2,3)
Weist den Zustand von
other
zu.
- Wenn weder * this noch other einen Wert enthalten, hat die Funktion keine Auswirkung.
- Wenn * this einen Wert enthält, aber other nicht, dann wird der enthaltene Wert durch Aufruf seines Destruktors zerstört. * this enthält nach dem Aufruf keinen Wert.
- Wenn other einen Wert enthält, dann wird – abhängig davon, ob * this einen Wert enthält – der enthaltene Wert entweder direkt initialisiert oder zugewiesen von * other (2) oder std :: move ( * other ) (3) . Beachten Sie, dass ein verschobener optional weiterhin einen Wert enthält .
4)
Nur-Dekadierung perfekte Weiterleitungszuweisung: Abhängig davon, ob
*
this
vor dem Aufruf einen Wert enthält, wird der enthaltene Wert entweder direkt initialisiert von
std::
forward
<
U
>
(
value
)
oder zugewiesen von
std::
forward
<
U
>
(
value
)
. Die Funktion nimmt nicht an der Überladungsauflösung teil, es sei denn
std::
is_same
<
std::
decay_t
<
U
>
, T
>
::
value
ist
true
.
Inhaltsverzeichnis |
Parameter
| other | - |
ein weiteres
optional
-Objekt, dessen enthaltenen Wert zugewiesen werden soll
|
| value | - | Wert, der dem enthaltenen Wert zugewiesen werden soll |
| Typanforderungen | ||
-
T
muss die Anforderungen von
CopyAssignable
und
CopyConstructible
erfüllen, um Überladung (2) zu verwenden.
|
||
-
T
muss die Anforderungen von
MoveAssignable
und
MoveConstructible
erfüllen, um Überladung (3) zu verwenden.
|
||
Rückgabewert
* this
Exceptions
2-4)
Wirft jede Ausnahme, die vom Konstruktor oder Zuweisungsoperator von
(3) hat die folgende
T
geworfen wird. Wenn eine Ausnahme geworfen wird, bleibt der Initialisierungszustand von
*
this
(und von
other
im Fall von (2)) unverändert, d.h. wenn das Objekt einen Wert enthielt, enthält es weiterhin einen Wert und umgekehrt. Der Inhalt von
value
und die enthaltenen Werte von
*
this
und
other
hängen von den Ausnahmesicherheitsgarantien der Operation ab, von der die Ausnahme stammt (Copy-Konstruktor, Move-Zuweisung, etc.).
(3) hat die folgende
noexcept
Deklaration:
noexcept
Spezifikation:
noexcept
(
std::
is_nothrow_move_assignable
<
T
>
::
value
&&
std::
is_nothrow_move_constructible
<
T
>
::
value
)
Hinweise
Ein optionales Objekt
op
kann mit beiden Methoden in ein leeres Optional umgewandelt werden:
op
=
{
}
;
und
op
=
nullopt
;
.
Beispiel
Diesen Code ausführen
#include <experimental/optional> #include <iostream> int main() { std::experimental::optional<const char*> s1 = "abc", s2; // Konstruktor s2 = s1; // Zuweisung s1 = "def"; // Zerfallende Zuweisung (U = char[4], T = const char*) std::cout << *s2 << ' ' << *s1 << '\n'; }
Ausgabe:
abc def
Siehe auch
|
Konstruiert den enthaltenen Wert direkt
(öffentliche Elementfunktion) |