Archivo de encabezado de la biblioteca estándar <optional>
De cppreference.com
Clases | ||
(C++17) |
Un envoltorio que puede o no mantener un objeto. (plantilla de clase) | |
(C++17) |
Excepción que indica que la prueba de acceso de un opcional no contiene un valor. (clase) | |
(C++17) |
Especializa el algoritmo std::hash. (especialización de plantilla de clase) | |
(C++17) |
Indicador de un tipo opcional con estado no inicializado. (clase) | |
Constantes | ||
(C++17) |
Un objeto de tipo nullopt_t (constante) | |
Funciones | ||
Comparación | ||
(C++17)(C++17)(C++17)(C++17)(C++17)(C++17)(C++20) |
Compara objetos opcionales (optional ). (plantilla de función) | |
Algoritmos especializados | ||
(C++17) |
Especializa el algoritmo std::swap. (función) | |
(C++17) |
Crea un objeto opcional (optional ). (plantilla de función) |
[editar] Sinopsis
namespace std { // plantilla de clase optional template<typename T> class optional; // indicador de estado de no-valor (sin valor) struct nullopt_t{/* véase descripción */}; inline constexpr nullopt_t nullopt(/* no especificado */); // clase bad_optional_access class bad_optional_access; // operadores relacionales template<typename T, typename U> constexpr bool operator==(const optional<T>&, const optional<U>&); template<typename T, typename U> constexpr bool operator!=(const optional<T>&, const optional<U>&); template<typename T, typename U> constexpr bool operator<(const optional<T>&, const optional<U>&); template<typename T, typename U> constexpr bool operator>(const optional<T>&, const optional<U>&); template<typename T, typename U> constexpr bool operator<=(const optional<T>&, const optional<U>&); template<typename T, typename U> constexpr bool operator>=(const optional<T>&, const optional<U>&); template<typename T, three_way_comparable_with<T> U> constexpr compare_three_way_result_t<T,U> operator<=>(const optional<T>&, const optional<U>&); // comparación con nullopt template<typename T> constexpr bool operator==(const optional<T>&, nullopt_t) noexcept; template<typename T> constexpr strong_ordering operator<=>(const optional<T>&, nullopt_t) noexcept; // comparación con T template<typename T, typename U> constexpr bool operator==(const optional<T>&, const U&); template<typename T, typename U> constexpr bool operator==(const T&, const optional<U>&); template<typename T, typename U> constexpr bool operator!=(const optional<T>&, const U&); template<typename T, typename U> constexpr bool operator!=(const T&, const optional<U>&); template<typename T, typename U> constexpr bool operator<(const optional<T>&, const U&); template<typename T, typename U> constexpr bool operator<(const T&, const optional<U>&); template<typename T, typename U> constexpr bool operator>(const optional<T>&, const U&); template<typename T, typename U> constexpr bool operator>(const T&, const optional<U>&); template<typename T, typename U> constexpr bool operator<=(const optional<T>&, const U&); template<typename T, typename U> constexpr bool operator<=(const T&, const optional<U>&); template<typename T, typename U> constexpr bool operator>=(const optional<T>&, const U&); template<typename T, typename U> constexpr bool operator>=(const T&, const optional<U>&); template<typename T, three_way_comparable_with<T> U> constexpr compare_three_way_result_t<T,U> operator<=>(const optional<T>&, const U&); // algoritmos especializados template<typename T> void swap(optional<T>&, optional<T>&) noexcept(/* véase descripción */); template<typename T> constexpr optional</* véase descripción */> make_optional(T&&); template<typename T, class... Args> constexpr optional<T> make_optional(Args&&... args); template<typename T, typename U, class... Args> constexpr optional<T> make_optional(initializer_list<U> il, Args&&... args); // soporte para hash template<typename T> struct hash; template<typename T> struct hash<optional<T>>; }
[editar] Plantilla de clase std::optional
namespace std { template<typename T> class optional { public: using value_type = T; // constructores constexpr optional() noexcept; constexpr optional(nullopt_t) noexcept; constexpr optional(const optional&); constexpr optional(optional&&) noexcept(/* véase descripción */); template<class... Args> constexpr explicit optional(in_place_t, Args&&...); template<typename U, class... Args> constexpr explicit optional(in_place_t, initializer_list<U>, Args&&...); template<typename U = T> explicit(/* véase descripción */) constexpr optional(U&&); template<typename U> explicit(/* véase descripción */) optional(const optional<U>&); template<typename U> explicit(/* véase descripción */) optional(optional<U>&&); // destructor ~optional(); // asignación optional& operator=(nullopt_t) noexcept; constexpr optional& operator=(const optional&); constexpr optional& operator=(optional&&) noexcept(/* véase descripción */); template<typename U = T> optional& operator=(U&&); template<typename U> optional& operator=(const optional<U>&); template<typename U> optional& operator=(optional<U>&&); template<class... Args> T& emplace(Args&&...); template<typename U, class... Args> T& emplace(initializer_list<U>, Args&&...); // intercambio void swap(optional&) noexcept(/* véase descripción */); // observadores constexpr const T* operator->() const; constexpr T* operator->(); constexpr const T& operator*() const&; constexpr T& operator*() &; constexpr T&& operator*() &&; constexpr const T&& operator*() const&&; constexpr explicit operator bool() const noexcept; constexpr bool has_value() const noexcept; constexpr const T& value() const&; constexpr T& value() &; constexpr T&& value() &&; constexpr const T&& value() const&&; template<typename U> constexpr T value_or(U&&) const&; template<typename U> constexpr T value_or(U&&) &&; // modificadores void reset() noexcept; private: T *val; // solo exposición }; template<typename T> optional(T) -> optional<T>; }