Namespaces
Variants

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

From cppreference.net
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 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:

Hinweise

Ein optionales Objekt op kann mit beiden Methoden in ein leeres Optional umgewandelt werden: op = { } ; und op = nullopt ; .

Beispiel

#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)