Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Šablona optional<T> třídy popisuje objekt, který může nebo nemusí obsahovat hodnotu typu T, která se označuje jako obsažená hodnota.
Pokud instance optional<T> obsahuje hodnotu, je obsažená hodnota přidělena v rámci úložiště optional objektu, v oblasti vhodně zarovnané pro typ T. Při převodu optional<T> na boolvýsledek je true , pokud objekt obsahuje hodnotu; v opačném případě je falseto .
Obsažený typ T objektu nesmí být in_place_t nebo nullopt_t. T musí být destruktivovatelný, to znamená, že jeho destruktor musí uvolnit všechny vlastněné prostředky a nesmí vyvolat žádné výjimky.
Třída optional je v jazyce C++17 nová.
Syntaxe
template <class T>
class optional
{
using value_type = T;
};
template<class T> optional(T) -> optional<T>;
Členové
Konstruktory
| Název | Popis |
|---|---|
| Konstruktory a destruktor | |
| optional | Vytvoří objekt typu optional. |
| ~volitelný | Zničí objekt typu optional. |
| Přiřazení | |
| operator= | optional Nahradí kopii jiného optionalsouboru . |
| umístit | Inicializuje hodnotu obsaženou se zadanými argumenty. |
| Vyměnit | |
| vyměnit | Prohodí obsaženou hodnotu nebo prázdný stav s jiným optional. |
| Pozorovatelé | |
| has_value | Vrátí, zda optional objekt obsahuje hodnotu. |
| value | Vrátí hodnotu obsaženou. |
| value_or | Vrátí hodnotu obsaženou nebo alternativu, pokud neexistuje žádná hodnota. |
| operátor-> | Odkazuje na obsaženou hodnotu objektu optional . |
| operátor* | Odkazuje na obsaženou hodnotu objektu optional . |
| bool – operátor | Vrátí, zda optional objekt obsahuje hodnotu. |
| Modifikátory | |
| resetovat | optional Obnoví hodnotu zničením jakékoli obsažené hodnoty. |
has_value
constexpr bool has_value() const noexcept;
volitelný konstruktor
Vytvoří objekt 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
Možnost optional kopírování nebo přesunutí vytvoří hodnotu obsaženou z.
i_list
Seznam inicializátoru pro vytvoření obsažené hodnoty z.
args
Seznam argumentů pro vytvoření obsažené hodnoty z.
Poznámky
constexpr optional() noexcept;constexpr optional(nullopt_t nullopt) noexcept; Tyto konstruktory vytvoří hodnotu optional , která neobsahuje hodnotu.
constexpr optional(const optional& rhs); Konstruktor copy inicializuje obsaženou hodnotu z obsažené hodnoty argumentu. Je definován jako odstraněný , pokud is_copy_constructible_v<T> není pravdivý, a pokud je pravdivý, je triviální is_trivially_copy_constructible_v<T> .
constexpr optional(optional&& rhs) noexcept; Konstruktor přesunutí inicializuje obsaženou hodnotu přesunutím z obsažené hodnoty argumentu. Není součástí řešení přetížení, pokud is_move_constructible_v<T> není pravda, a to je triviální, pokud is_trivially_move_constructible_v<T> je pravda.
template <class... Args> constexpr explicit optional(in_place_t, Args&&... args); Přímo inicializuje obsaženou hodnotu, jako by používal argumenty std::forward<Args>(args). Tento konstruktor je constexpr , pokud T je constexprpoužit konstruktor . Není součástí řešení přetížení, pokud is_constructible_v<T, Args...> není pravdivý.
template <class U, class... Args> constexpr explicit optional(in_place_t, initializer_list<U> i_list, Args&&... args); Přímo inicializuje obsaženou hodnotu, jako by používal argumenty i_list, std::forward<Args>(args). Tento konstruktor je constexpr , pokud T je constexprpoužit konstruktor . Není součástí řešení přetížení, pokud is_constructible_v<T, initializer_list<U>&, Args&&...> není pravdivý.
template <class U = T> explicit constexpr optional(U&& rhs); Direct initializes thecontained value as if if using std::forward<U>(v). Tento konstruktor je constexpr , pokud T je constexprpoužit konstruktor . Není součástí řešení přetížení, pokud is_constructible_v<T, U&&> není pravda a is_same_v<remove_cvref_t<U>, in_place_t> is_same_v<remove_cvref_t<U>, optional> nejsou false.
template <class U> explicit optional(const optional<U>& rhs); Pokud rhs obsahuje hodnotu, direct initializes thecontained value from thecontained value of the argument. Není součástí řešení přetížení, pokud is_constructible_v<T, const U&> není true, a 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>a is_convertible_v<const optional<U>&&, T> jsou všechny false.
template <class U> explicit optional(optional<U>&& rhs); Pokud rhs obsahuje hodnotu, přímo inicializuje obsaženou hodnotu, jako kdybyste používali std::move(*rhs). Není součástí řešení přetížení, pokud is_constructible_v<T, U&&> není true, a 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>a is_convertible_v<const optional<U>&&, T> jsou všechny false.
~volitelný destruktor
Zničí obsaženou hodnotu, pokud existuje.
~optional();
Poznámky
Pokud T je triviálně destrukovatelný, je také optional<T> triviálně destrukovatelný.
operator=
Nahradí obsaženou hodnotu kopie optional nebo se přesune z jiné optional obsažené hodnoty.
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&&...);
operátor->
Dereferences obsažené hodnoty objektu optional .
constexpr const T* operator->() const;
constexpr T* operator->();
operátor*
Dereferences obsažené hodnoty objektu optional .
constexpr const T& operator*() const&;
constexpr T& operator*() &;
constexpr T&& operator*() &&;
constexpr const T&& operator*() const&&;
bool – operátor
Zaznamenává, zda optional má objekt hodnotu obsaženou.
constexpr explicit operator bool() const noexcept;
resetování
Efektivně volá destruktor obsaženého objektu, pokud existuje, a nastaví ho na neinicializovaný stav.
void reset() noexcept;
swap
template<class T>
void swap(optional<T>&, optional<T>&) noexcept;
hodnota
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&&) &&;