std::experimental::optional
| Definiert im Header <experimental/optional> |
||
| template< class T > class optional; |
(library fundamentals TS) | |
Die Klassenschablone std::experimental::optional verwaltet einen *optionalen* enthaltenen Wert, d. h. einen Wert, der vorhanden sein kann oder nicht.
Ein häufiger Anwendungsfall für optional ist der Rückgabewert einer Funktion, die fehlschlagen kann. Im Gegensatz zu anderen Ansätzen wie std::pair<T,bool> behandelt optional teuer zu konstruierende Objekte gut und ist lesbarer, da die Absicht explizit ausgedrückt wird.
Jede Instanz von optional<T> enthält zu jedem Zeitpunkt entweder *einen Wert* oder *enthält keinen Wert*.
Wenn ein optional<T> *einen Wert enthält*, ist garantiert, dass der Wert als Teil des Speicherplatzes des optional-Objekts zugeordnet wird, d. h. es findet niemals eine dynamische Speicherzuweisung statt. Daher modelliert ein optional-Objekt ein Objekt und keinen Zeiger, obwohl die Operatoren operator*() und operator->() definiert sind.
Wenn ein Objekt vom Typ optional<T> kontextuell in bool umgewandelt wird, gibt die Umwandlung true zurück, wenn das Objekt *einen Wert enthält*, und false, wenn es *keinen Wert enthält*.
Das optional-Objekt *enthält einen Wert* unter folgenden Bedingungen
- Das Objekt wird mit einem Wert vom Typ
Tinitialisiert. - Das Objekt wird aus einem anderen
optionalzugewiesen, das *einen Wert enthält*.
Das Objekt *enthält keinen Wert* unter folgenden Bedingungen
- Das Objekt wird standardmäßig initialisiert.
- Das Objekt wird mit einem Wert von std::experimental::nullopt_t oder einem
optional-Objekt initialisiert, das *keinen Wert enthält*. - Das Objekt wird aus einem Wert von std::experimental::nullopt_t oder aus einem
optionalzugewiesen, das *keinen Wert enthält*.
Inhalt |
[bearbeiten] Schablonenparameter
| T | - | der Typ des zu verwaltenden Werts, für den der Initialisierungsstatus ermittelt wird. Der Typ muss die Anforderungen an Destructible erfüllen. |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition |
value_type
|
T
|
[bearbeiten] Member-Funktionen
| konstruiert das optional-Objekt (public member function) | |
| zerstört den enthaltenen Wert, falls vorhanden (public member function) | |
| weist Inhalte zu (public member function) | |
Observer | |
| greift auf den enthaltenen Wert zu (public member function) | |
| prüft, ob das Objekt einen Wert enthält (public member function) | |
| gibt den enthaltenen Wert zurück (public member function) | |
| gibt den enthaltenen Wert zurück, falls vorhanden, sonst einen anderen Wert (public member function) | |
Modifizierer | |
| tauscht die Inhalte (public member function) | |
| konstruiert den enthaltenen Wert in-place (public member function) | |
[bearbeiten] Member-Objekte
| Member-Name | Definition |
val (private) |
Zeiger auf den enthaltenen Wert (der auf ein Datenelement desselben Objekts zeigt), der Name dient nur der Veranschaulichung |
[bearbeiten] Nicht-Member-Funktionen
vergleicht optional-Objekte(function template) | |
erzeugt ein optional-Objekt(function template) | |
| spezialisiert den Algorithmus std::swap (function) |
[bearbeiten] Hilfsklassen
| spezialisiert den std::hash-Algorithmus (class template specialization) | |
| (library fundamentals TS) |
Indikator für einen optionalen Typ mit uninitialisiertem Zustand (class) |
| (library fundamentals TS) |
Disambiguierung-Tag-Typ für die In-Place-Konstruktion von optionalen Typen (class) |
| (library fundamentals TS) |
Ausnahme, die auf einen geprüften Zugriff auf ein optionales Element hinweist, das keinen Wert enthält (class) |
[bearbeiten] Hilfsobjekte
| (library fundamentals TS) |
ein Objekt vom Typ nullopt_t(function) |
| (library fundamentals TS) |
ein Objekt vom Typ std::experimental::in_place_t (function) |