std::experimental::optional<T>::operator=
Von cppreference.com
< 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 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
(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 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-Deklarationnoexcept-Spezifikation:
noexcept(std::is_nothrow_move_assignable<T>::value && std::is_nothrow_move_constructible<T>::value)
[edit] Anmerkungen
Ein optionales Objekt op kann mit sowohl op = {}; als auch op = nullopt; in ein leeres optional verwandelt werden.
[edit] Beispiel
Führen Sie diesen Code aus
#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) |