Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
 
 
 
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 val->T::~T() aufgerufen würde. *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, other jedoch nicht, wird der enthaltene Wert durch Aufruf seines Destruktors zerstört. *this enthält nach dem Aufruf keinen Wert.
  • Wenn other einen Wert enthält, wird der enthaltene Wert entweder direkt initialisiert oder zugewiesen von *other (2) oder std::move(*other) (3), je nachdem, ob *this einen Wert enthält. Beachten Sie, dass ein verschobenes optional immer noch *einen Wert enthält*.
4) Decay-only perfect-forwarded assignment: je nachdem, ob *this vor dem Aufruf einen Wert enthält, wird der enthaltene Wert entweder direkt aus std::forward<U>(value) initialisiert oder aus std::forward<U>(value) zugewiesen. Die Funktion nimmt nicht an der Überladungsauflösung teil, es sei denn, std::is_same<std::decay_t<U>, T>::value ist true.

Inhalt

[edit] Parameter

Sonstiges - ein weiteres optional-Objekt, dessen enthaltener 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) verwenden zu können.
-
T muss die Anforderungen von MoveAssignable und MoveConstructible erfüllen, um Überladung (3) verwenden zu können.

[edit] Rückgabewert

*this

[edit] Ausnahmen

2-4) Wirft jede Ausnahme, die vom Konstruktor oder Zuweisungsoperator von 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 immer noch einen Wert und umgekehrt. Die Inhalte von value und die enthaltenen Werte von *this und other hängen von den Ausnahmesicherheitsgarantien der Operation ab, von der die Ausnahme stammt (Kopierkonstruktor, Move-Zuweisung usw.).
(3) hat die folgende noexcept-Deklaration
noexcept-Spezifikation:  

[edit] Anmerkungen

Ein optionales Objekt op kann mit sowohl op = {}; als auch op = nullopt; in ein leeres optional verwandelt werden.

[edit] Beispiel

#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';
}

Ausgabe

abc def

[edit] Siehe auch

konstruiert den enthaltenen Wert in-place
(public member function) [edit]