Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La plantilla de clase optional<T> describe un objeto que puede contener o no un valor de tipo T, conocido como el valor contenido.
Cuando una instancia de optional<T> contiene un valor, el valor contenido se asigna dentro del almacenamiento del objeto optional, en una región alineada correctamente para el tipo T. Cuando se convierte un optional<T> en bool, el resultado es true si el objeto contiene un valor; de lo contrario, es false.
El tipo T de objeto contenido no debe ser in_place_t ni nullopt_t. T debe ser destructible, es decir, su destructor debe reclamar todos los recursos propiedad y no puede producir ninguna excepción.
La clase optional es nueva en C++17.
Sintaxis
template <class T>
class optional
{
using value_type = T;
};
template<class T> optional(T) -> optional<T>;
Miembros
Constructores
| Nombre | Descripción |
|---|---|
| Constructores y destructor | |
| opcional | Construye un objeto de tipo optional. |
| ~optional | Destruye un objeto de tipo optional. |
| Cesión | |
| operator= | Reemplaza la clase optional por una copia de otra clase optional. |
| emplace | Inicializa el valor contenido con argumentos especificados. |
| Swap | |
| swap | Intercambia el valor contenido o el estado vacío con otra clase optional. |
| Observadores | |
| has_value | Devuelve si un objeto optional contiene un valor. |
| value | Devuelve el valor contenido. |
| value_or | Devuelve el valor contenido o una alternativa si no hay ningún valor presente. |
| operator-> | Hace referencia al valor contenido de un objeto optional. |
| operator* | Hace referencia al valor contenido de un objeto optional. |
| operator bool | Devuelve si un objeto optional contiene un valor. |
| Modificadores | |
| reset | Restablece la clase optional mediante la destrucción de cualquier valor contenido. |
has_value
constexpr bool has_value() const noexcept;
optional (constructor)
Construye un objeto de tipo 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);
Parámetros
rhs
El optional a partir del cual se va construir la copia o el movimiento del valor contenido.
i_list
Lista de inicializadores a partir de la que se va a construir el valor contenido.
args
Lista de argumentos a partir de la que se va a construir el valor contenido.
Comentarios
constexpr optional() noexcept;constexpr optional(nullopt_t nullopt) noexcept; Estos constructores construyen un optional que no contiene un valor.
constexpr optional(const optional& rhs); El constructor de copia inicializa el valor contenido del valor contenido del argumento. Se define como eliminado a menos is_copy_constructible_v<T> que sea true y es trivial si is_trivially_copy_constructible_v<T> es true.
constexpr optional(optional&& rhs) noexcept; El constructor de movimiento inicializa el valor contenido moviendo desde el valor contenido del argumento. No participa en la resolución de sobrecargas a menos que is_move_constructible_v<T> sea true y es trivial si is_trivially_move_constructible_v<T> es true.
template <class... Args> constexpr explicit optional(in_place_t, Args&&... args); Inicializa directamente el valor contenido como si usara los argumentos std::forward<Args>(args). Este constructor es constexpr si el constructor T utilizado es constexpr. No participa en la resolución de sobrecarga a menos que is_constructible_v<T, Args...> sea true.
template <class U, class... Args> constexpr explicit optional(in_place_t, initializer_list<U> i_list, Args&&... args); Inicializa directamente el valor contenido como si usara los argumentos i_list, std::forward<Args>(args). Este constructor es constexpr si el constructor T utilizado es constexpr. No participa en la resolución de sobrecarga a menos que is_constructible_v<T, initializer_list<U>&, Args&&...> sea true.
template <class U = T> explicit constexpr optional(U&& rhs); Inicializa directamente el valor contenido como si usara std::forward<U>(v). Este constructor es constexpr si el constructor T utilizado es constexpr. No participa en la resolución de sobrecargas a menos que is_constructible_v<T, U&&> sea true y is_same_v<remove_cvref_t<U>, in_place_t> y is_same_v<remove_cvref_t<U>, optional> sean false.
template <class U> explicit optional(const optional<U>& rhs); Si rhs contiene un valor, inicializa directamente el valor contenido del valor contenido del argumento. No participa en la resolución de sobrecargas a menos que is_constructible_v<T, const U&> sea true, y 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> y is_convertible_v<const optional<U>&&, T> sean todos false.
template <class U> explicit optional(optional<U>&& rhs); Si rhs contiene un valor, inicializa directamente el valor contenido como si usara std::move(*rhs). No participa en la resolución de sobrecargas a menos que is_constructible_v<T, U&&> sea true, y 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> y is_convertible_v<const optional<U>&&, T> sean todos false.
~optional (destructor)
Destruye el valor contenido, si hay uno presente.
~optional();
Comentarios
Si T es trivialmente destructible, optional<T> también es trivialmente destructible.
operator=
Reemplaza el valor contenido de un objeto optional por una copia o movimiento de otro valor contenido de optional.
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->
Desreferencia el valor contenido de un objeto optional.
constexpr const T* operator->() const;
constexpr T* operator->();
operator*
Desreferencia el valor contenido de un objeto optional.
constexpr const T& operator*() const&;
constexpr T& operator*() &;
constexpr T&& operator*() &&;
constexpr const T&& operator*() const&&;
operator bool
Informa de si el objeto optional tiene un valor contenido.
constexpr explicit operator bool() const noexcept;
reset
De hecho, llama al destructor del objeto contenido, si existe, y lo establece en un estado no inicializado.
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&&) &&;