Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Die Klassenvorlage optional<T> beschreibt ein Objekt, das einen Wert vom Typ Tenthalten kann oder nicht enthält, der als enthaltener Wert bezeichnet wird.
Wenn eine Instanz eines optional<T> Werts enthält, wird der enthaltene Wert innerhalb des Speichers des optional Objekts zugeordnet, in einem Bereich, der entsprechend für den Typ Tausgerichtet ist. Wenn ein optional<T> Objekt konvertiert boolwird, lautet true das Ergebnis, wenn das Objekt einen Wert enthält; andernfalls ist falsees .
Der enthaltene Objekttyp T darf nicht sein in_place_t oder nullopt_t. Tmuss destruktierbar sein, d. h. der Destruktor muss alle eigenen Ressourcen zurückfordern und kann keine Ausnahmen auslösen.
Die optional Klasse ist neu in C++17.
Syntax
template <class T>
class optional
{
using value_type = T;
};
template<class T> optional(T) -> optional<T>;
Member
Konstruktoren
| Name | Beschreibung |
|---|---|
| Konstruktoren und Destruktor | |
| optional | Konstruiert ein Objekt vom Typ optional. |
| ~wahlfrei | Zerstört ein Objekt vom Typ optional. |
| Abtretung | |
| operator= | Ersetzt die optional Kopie einer anderen optional. |
| emplace | Initialisiert den enthaltenen Wert mit angegebenen Argumenten. |
| Swap | |
| swap | Tauscht den enthaltenen Wert oder den leeren Zustand durch einen anderen optional. |
| Beobachter | |
| has_value | Gibt zurück, ob ein optional Objekt einen Wert enthält. |
| value | Gibt den enthaltenen Wert zurück. |
| value_or | Gibt den enthaltenen Wert oder eine Alternative zurück, wenn kein Wert vorhanden ist. |
| operator-> | Verweist auf den enthaltenen Wert eines optional Objekts. |
| operator* | Verweist auf den enthaltenen Wert eines optional Objekts. |
| operator bool | Gibt zurück, ob ein optional Objekt einen Wert enthält. |
| Modifizierer | |
| reset | Setzt die optional zurück, indem alle enthaltenen Werte zerstört werden. |
has_value
constexpr bool has_value() const noexcept;
optionaler Konstruktor
Konstruiert ein Objekt vom Typ optional.
constexpr optional() noexcept;
constexpr optional(nullopt_t nullopt) noexcept;
constexpr optional(const optional& rhs);
constexpr optional(optional&& rhs) noexcept;
template <class... Args>
constexpr explicit optional(in_place_t, Args&&... args);
template <class U, class... Args>
constexpr explicit optional(in_place_t, initializer_list<U> i_list, Args&&... args);
template <class U = T>
explicit constexpr optional(U&& rhs);
template <class U>
explicit optional(const optional<U>& rhs);
template <class U>
explicit optional(optional<U>&& rhs);
Parameter
rhs
Das optional zu kopierende oder verschiebende Konstrukt des enthaltenen Werts.
i_list
Die Initialisierungsliste, aus der der enthaltene Wert erstellt werden soll.
args
Die Argumentliste, aus der der enthaltene Wert erstellt werden soll.
Hinweise
constexpr optional() noexcept;constexpr optional(nullopt_t nullopt) noexcept; Diese Konstruktoren erstellen einen optional Wert, der keinen Wert enthält.
constexpr optional(const optional& rhs); Der Kopierkonstruktor initialisiert den enthaltenen Wert aus dem enthaltenen Wert des Arguments. Es wird als gelöscht definiert, es sei denn is_copy_constructible_v<T> , es ist wahr, und es ist trivial, wenn is_trivially_copy_constructible_v<T> er wahr ist.
constexpr optional(optional&& rhs) noexcept; Der Verschiebungskonstruktor initialisiert den enthaltenen Wert, indem er aus dem enthaltenen Wert des Arguments wechselt. Es nimmt nicht an der Überladungsauflösung teil, es sei denn is_move_constructible_v<T> , es ist wahr, und es ist trivial, wenn is_trivially_move_constructible_v<T> dies zutrifft.
template <class... Args> constexpr explicit optional(in_place_t, Args&&... args); Der enthaltene Wert wird direkt initialisiert, als ob die Argumente std::forward<Args>(args)verwendet werden. Dieser Konstruktor ist constexpr , wenn der T verwendete constexprKonstruktor . Sie nimmt nicht an der Überladungsauflösung teil, es sei denn is_constructible_v<T, Args...> , sie ist wahr.
template <class U, class... Args> constexpr explicit optional(in_place_t, initializer_list<U> i_list, Args&&... args); Der enthaltene Wert wird direkt initialisiert, als ob die Argumente i_list, std::forward<Args>(args)verwendet werden. Dieser Konstruktor ist constexpr , wenn der T verwendete constexprKonstruktor . Sie nimmt nicht an der Überladungsauflösung teil, es sei denn is_constructible_v<T, initializer_list<U>&, Args&&...> , sie ist wahr.
template <class U = T> explicit constexpr optional(U&& rhs); Direct initialisiert den enthaltenen Wert so, als ob er verwendet std::forward<U>(v)wird. Dieser Konstruktor ist constexpr , wenn der T verwendete constexprKonstruktor . Sie nimmt nicht an der Überladungsauflösung teil, es sei denn is_constructible_v<T, U&&> , sie ist wahr und is_same_v<remove_cvref_t<U>, in_place_t> is_same_v<remove_cvref_t<U>, optional> ist falsch.
template <class U> explicit optional(const optional<U>& rhs); Wenn rhs einen Wert enthält, initialisiert direct den enthaltenen Wert aus dem enthaltenen Wert des Arguments. Sie nimmt nicht an der Überlastungsauflösung teil, es sei denn is_constructible_v<T, const U&> , es ist wahr, und is_constructible_v<T, optional<U>&>, is_constructible_v<T, optional<U>&&>, is_constructible_v<T, const optional<U>&>, is_constructible_v<T, const optional<U>&&>, is_convertible_v<optional<U>&, T>, , is_convertible_v<optional<U>&&, T>, , is_convertible_v<const optional<U>&, T>und is_convertible_v<const optional<U>&&, T> sind alle falsch.
template <class U> explicit optional(optional<U>&& rhs); Wenn rhs einen Wert enthält, initialisiert direct den enthaltenen Wert so, als ob std::move(*rhs)er verwendet wird. Sie nimmt nicht an der Überlastungsauflösung teil, es sei denn is_constructible_v<T, U&&> , es ist wahr, und is_constructible_v<T, optional<U>&>, is_constructible_v<T, optional<U>&&>, is_constructible_v<T, const optional<U>&>, is_constructible_v<T, const optional<U>&&>, is_convertible_v<optional<U>&, T>, , is_convertible_v<optional<U>&&, T>, , is_convertible_v<const optional<U>&, T>und is_convertible_v<const optional<U>&&, T> sind alle falsch.
~optionaler Destruktor
Zerstört den enthaltenen Wert, falls vorhanden.
~optional();
Hinweise
Wenn T es trivial destruktierbar ist, ist dies optional<T> auch trivial destruktierbar.
operator =
Ersetzt den enthaltenen Wert einer optional Durchschrift durch eine Kopie oder den Wechsel von einem anderen optional enthaltenen Wert.
optional& operator=(nullopt_t) noexcept;
optional& operator=(const optional& rhs);
optional& operator=(optional&&) noexcept( /* see below */ );
template <class U = T>
optional& operator=(U&&);
template <class U>
optional& operator=(const optional<U>&);
template <class U>
optional& operator=(optional<U>&&);
template <class... Args>
T& emplace(Args&&...);
template <class U, class... Args>
T& emplace(initializer_list<U>, Args&&...);
Operator->
Leitet den enthaltenen Wert eines optional Objekts ab.
constexpr const T* operator->() const;
constexpr T* operator->();
operator*
Leitet den enthaltenen Wert eines optional Objekts ab.
constexpr const T& operator*() const&;
constexpr T& operator*() &;
constexpr T&& operator*() &&;
constexpr const T&& operator*() const&&;
operator bool
Gibt an, ob das optional Objekt einen enthaltenen Wert aufweist.
constexpr explicit operator bool() const noexcept;
reset
Ruft effektiv den Destruktor des enthaltenen Objekts auf, falls vorhanden, und legt ihn auf einen nicht initialisierten Zustand fest.
void reset() noexcept;
swap
template<class T>
void swap(optional<T>&, optional<T>&) noexcept;
value
constexpr const T& value() const&;
constexpr T& value() &;
constexpr T&& value() &&;
constexpr const T&& value() const&&;
value_or
template <class U>
constexpr T value_or(U&&) const&;
template <class U>
constexpr T value_or(U&&) &&;