Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Templat optional<T> kelas menjelaskan objek yang mungkin atau mungkin tidak berisi nilai jenis T, yang dikenal sebagai nilai yang terkandung.
Saat instans optional<T> berisi nilai, nilai yang terkandung dialokasikan dalam penyimpanan optional objek, di wilayah yang cocok diselaraskan untuk jenis T. optional<T> Ketika dikonversi ke bool, hasilnya adalah true jika objek berisi nilai; jika tidak, itu adalah false.
Jenis T objek yang terkandung tidak boleh in_place_t atau nullopt_t. T harus dapat dihancurkan, yaitu, destruktornya harus merebut kembali semua sumber daya yang dimiliki, dan tidak boleh melemparkan pengecualian.
Kelas optional ini baru di C++17.
Sintaks
template <class T>
class optional
{
using value_type = T;
};
template<class T> optional(T) -> optional<T>;
Anggota
Konstruktor
| Nama | Deskripsi |
|---|---|
| Konstruktor dan destruktor | |
| opsional | Membuat objek jenis optional. |
| ~fakultatif | Menghancurkan objek jenis optional. |
| Penugasan | |
| operator= | optional Mengganti dengan salinan lain optional. |
| emplace | Menginisialisasi nilai yang terkandung dengan argumen yang ditentukan. |
| Swap | |
| tukar | Tukar nilai yang terkandung atau status kosong dengan yang lain optional. |
| Pengamat | |
| has_value | Mengembalikan apakah optional objek berisi nilai. |
| value | Mengembalikan nilai yang terkandung. |
| value_or | Mengembalikan nilai yang terkandung, atau alternatif jika tidak ada nilai yang ada. |
| Operator-> | Mereferensikan nilai objek yang optional terkandung. |
| Operator* | Mereferensikan nilai objek yang optional terkandung. |
| bool operator | Mengembalikan apakah optional objek berisi nilai. |
| Pengubah | |
| Reset | Mengatur ulang optional dengan menghancurkan nilai apa pun yang terkandung. |
has_value
constexpr bool has_value() const noexcept;
konstruktor opsional
Membuat objek jenis 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
optional untuk menyalin atau memindahkan konstruksi nilai yang terkandung dari.
i_list
Daftar penginisialisasi untuk membuat nilai yang terkandung dari.
argumen
Daftar argumen untuk membuat nilai yang terkandung dari.
Keterangan
constexpr optional() noexcept;constexpr optional(nullopt_t nullopt) noexcept; Konstruktor ini membangun optional yang tidak berisi nilai.
constexpr optional(const optional& rhs); Konstruktor salinan menginisialisasi nilai yang terkandung dari nilai argumen yang terkandung. Ini didefinisikan sebagai dihapus kecuali is_copy_constructible_v<T> benar, dan itu sepele jika is_trivially_copy_constructible_v<T> benar.
constexpr optional(optional&& rhs) noexcept; Konstruktor pemindahan menginisialisasi nilai yang terkandung dengan berpindah dari nilai argumen yang terkandung. Ini tidak berpartisipasi dalam resolusi kelebihan beban kecuali is_move_constructible_v<T> benar, dan itu sepele jika is_trivially_move_constructible_v<T> benar.
template <class... Args> constexpr explicit optional(in_place_t, Args&&... args); Langsung menginisialisasi nilai yang terkandung seolah-olah menggunakan argumen std::forward<Args>(args). Konstruktor ini adalah constexpr jika konstruktor yang T digunakan adalah constexpr. Ini tidak berpartisipasi dalam resolusi kelebihan beban kecuali is_constructible_v<T, Args...> benar.
template <class U, class... Args> constexpr explicit optional(in_place_t, initializer_list<U> i_list, Args&&... args); Langsung menginisialisasi nilai yang terkandung seolah-olah menggunakan argumen i_list, std::forward<Args>(args). Konstruktor ini adalah constexpr jika konstruktor yang T digunakan adalah constexpr. Ini tidak berpartisipasi dalam resolusi kelebihan beban kecuali is_constructible_v<T, initializer_list<U>&, Args&&...> benar.
template <class U = T> explicit constexpr optional(U&& rhs); Langsung menginisialisasi nilai yang terkandung seolah-olah menggunakan std::forward<U>(v). Konstruktor ini adalah constexpr jika konstruktor yang T digunakan adalah constexpr. Ini tidak berpartisipasi dalam resolusi kelebihan beban kecuali is_constructible_v<T, U&&> benar, dan is_same_v<remove_cvref_t<U>, in_place_t> dan is_same_v<remove_cvref_t<U>, optional> salah.
template <class U> explicit optional(const optional<U>& rhs); Jika rhs berisi nilai, direct menginisialisasi nilai yang terkandung dari nilai argumen yang terkandung. Ini tidak berpartisipasi dalam resolusi kelebihan beban kecuali is_constructible_v<T, const U&> benar, dan 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>, , dan is_convertible_v<const optional<U>&&, T> semuanya salah.
template <class U> explicit optional(optional<U>&& rhs); Jika rhs berisi nilai, langsung menginisialisasi nilai yang terkandung seolah-olah menggunakan std::move(*rhs). Ini tidak berpartisipasi dalam resolusi kelebihan beban kecuali is_constructible_v<T, U&&> benar, dan 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>, , dan is_convertible_v<const optional<U>&&, T> semuanya salah.
~destruktor opsional
Menghancurkan nilai yang terkandung, jika ada.
~optional();
Keterangan
Jika T sepele dapat disusupi, maka optional<T> juga dapat dihapuskan secara sepele.
operator=
Mengganti nilai optional yang terkandung dengan salinan atau pemindahan dari nilai lain optional yang terkandung.
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->
Dereferensi nilai objek yang optional terkandung.
constexpr const T* operator->() const;
constexpr T* operator->();
Operator*
Dereferensi nilai objek yang optional terkandung.
constexpr const T& operator*() const&;
constexpr T& operator*() &;
constexpr T&& operator*() &&;
constexpr const T&& operator*() const&&;
bool operator
Melaporkan apakah optional objek memiliki nilai yang terkandung.
constexpr explicit operator bool() const noexcept;
mengatur ulang
Secara efektif, memanggil destruktor objek yang terkandung, jika ada, dan mengaturnya ke status tidak diinisialisasi.
void reset() noexcept;
pertukaran
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&&) &&;