Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Szablon klasy optional<T> opisuje obiekt, który może lub nie zawiera wartości typu T, znany jako zawarta wartość.
Gdy wystąpienie optional<T> obiektu zawiera wartość, zawarta wartość jest przydzielana w magazynie optional obiektu w regionie odpowiednio wyrównanym dla typu T. Gdy obiekt optional<T> jest konwertowany na boolwartość , wynikiem jest true , jeśli obiekt zawiera wartość; w przeciwnym razie jest falseto .
Typ zawartego obiektu T nie może mieć wartości in_place_t lub nullopt_t. T musi być destruktor, czyli jego destruktor musi odzyskać wszystkie zasoby należące do użytkownika i może nie zgłaszać żadnych wyjątków.
Klasa optional jest nowa w języku C++17.
Składnia
template <class T>
class optional
{
using value_type = T;
};
template<class T> optional(T) -> optional<T>;
Elementy członkowskie
Konstruktory
| Nazwa/nazwisko | opis |
|---|---|
| Konstruktory i destruktor | |
| optional | Tworzy obiekt typu optional. |
| ~fakultatywny | Niszczy obiekt typu optional. |
| Przypisanie | |
| operator = | Zastępuje element optional kopią innego optionalelementu . |
| miejsce | Inicjuje zawartą wartość z określonymi argumentami. |
| Zamiana | |
| zamiana | Zamienia zawartą wartość lub pusty stan na inny optional. |
| Obserwatorów | |
| has_value | Zwraca, czy optional obiekt zawiera wartość. |
| wartość | Zwraca zawartą wartość. |
| value_or | Zwraca zawartą wartość lub alternatywę, jeśli żadna wartość nie jest obecna. |
| operator-> | Odwołuje się do zawartej optional wartości obiektu. |
| operator* | Odwołuje się do zawartej optional wartości obiektu. |
| operator bool | Zwraca, czy optional obiekt zawiera wartość. |
| Modyfikatory | |
| resetować | Resetuje element optional , niszcząc dowolną zawartą wartość. |
has_value
constexpr bool has_value() const noexcept;
konstruktor opcjonalny
Tworzy obiekt typu 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);
Parametry
Rhs
Element optional do skopiowania lub przeniesienia skonstruuje zawartą wartość z.
i_list
Lista inicjatora do konstruowania zawartej wartości z.
args
Lista argumentów do konstruowania zawartej wartości z.
Uwagi
constexpr optional() noexcept;constexpr optional(nullopt_t nullopt) noexcept; Konstruktory te skonstruuje obiekt optional , który nie zawiera wartości.
constexpr optional(const optional& rhs); Konstruktor kopiowania inicjuje zawartą wartość z zawartej wartości argumentu. Jest on zdefiniowany jako usunięty , chyba że is_copy_constructible_v<T> ma wartość true, i jest to proste, jeśli is_trivially_copy_constructible_v<T> jest prawdziwe.
constexpr optional(optional&& rhs) noexcept; Konstruktor przenoszenia inicjuje zawartą wartość, przechodząc z zawartej wartości argumentu. Nie uczestniczy w rozwiązywaniu przeciążenia, chyba że is_move_constructible_v<T> ma wartość true, i jest to proste, jeśli is_trivially_move_constructible_v<T> jest prawdziwe.
template <class... Args> constexpr explicit optional(in_place_t, Args&&... args); Direct inicjuje zawartą wartość tak, jakby używała argumentów std::forward<Args>(args). Ten konstruktor jest constexpr , jeśli T używany konstruktor to constexpr. Nie uczestniczy w rozwiązywaniu przeciążenia, chyba że is_constructible_v<T, Args...> ma wartość true.
template <class U, class... Args> constexpr explicit optional(in_place_t, initializer_list<U> i_list, Args&&... args); Direct inicjuje zawartą wartość tak, jakby używała argumentów i_list, std::forward<Args>(args). Ten konstruktor jest constexpr , jeśli T używany konstruktor to constexpr. Nie uczestniczy w rozwiązywaniu przeciążenia, chyba że is_constructible_v<T, initializer_list<U>&, Args&&...> ma wartość true.
template <class U = T> explicit constexpr optional(U&& rhs); Direct inicjuje zawartą wartość tak, jakby używała polecenia std::forward<U>(v). Ten konstruktor jest constexpr , jeśli T używany konstruktor to constexpr. Nie uczestniczy w rozwiązywaniu przeciążenia, chyba że is_constructible_v<T, U&&> jest prawdziwe i is_same_v<remove_cvref_t<U>, in_place_t> is_same_v<remove_cvref_t<U>, optional> są fałszywe.
template <class U> explicit optional(const optional<U>& rhs); Jeśli rhs zawiera wartość, bezpośrednie inicjuje zawartą wartość z zawartej wartości argumentu. Nie uczestniczy w rozwiązywaniu przeciążenia, chyba że is_constructible_v<T, const U&> ma wartość true, i is_constructible_v<T, optional<U>&>, , is_convertible_v<optional<U>&, T>is_constructible_v<T, const optional<U>&&>is_constructible_v<T, const optional<U>&>is_convertible_v<optional<U>&&, T>is_constructible_v<T, optional<U>&&>, , , is_convertible_v<const optional<U>&, T>i is_convertible_v<const optional<U>&&, T> są fałszywe.
template <class U> explicit optional(optional<U>&& rhs);Jeśli rhs zawiera wartość, direct inicjuje zawartą wartość tak, jakby używała .std::move(*rhs) Nie uczestniczy w rozwiązywaniu przeciążenia, chyba że is_constructible_v<T, U&&> ma wartość true, i is_constructible_v<T, optional<U>&>, , is_convertible_v<optional<U>&, T>is_constructible_v<T, const optional<U>&&>is_constructible_v<T, const optional<U>&>is_convertible_v<optional<U>&&, T>is_constructible_v<T, optional<U>&&>, , , is_convertible_v<const optional<U>&, T>i is_convertible_v<const optional<U>&&, T> są fałszywe.
~opcjonalny destruktor
Niszczy zawartą wartość, jeśli istnieje.
~optional();
Uwagi
Jeśli T jest trywialnie destrukcji, to optional<T> jest również trywialnie destrukcji.
operator =
Zamienia zawartą wartość elementu optional na kopię lub przenieś ją z innej optional zawartej wartości.
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->
Wyłusza zawartą wartość optional obiektu.
constexpr const T* operator->() const;
constexpr T* operator->();
operator*
Wyłusza zawartą wartość optional obiektu.
constexpr const T& operator*() const&;
constexpr T& operator*() &;
constexpr T&& operator*() &&;
constexpr const T&& operator*() const&&;
operator bool
Zgłasza, optional czy obiekt ma zawartą wartość.
constexpr explicit operator bool() const noexcept;
Resetowanie
Skutecznie wywołuje destruktor zawartego obiektu, jeśli istnieje, i ustawia go na stan niezainicjowany.
void reset() noexcept;
swap
template<class T>
void swap(optional<T>&, optional<T>&) noexcept;
wartość
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&&) &&;