Namespaces
Variants

std::optional<T>::operator->, std::optional<T>::operator*

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
Funciones de comparación de enteros
(C++20)(C++20)(C++20)    
(C++20)
Operaciones de intercambio y tipo
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Tipos de vocabulario comunes
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
constexpr const T* operator->() const noexcept;
(1) (desde C++17)
constexpr T* operator->() noexcept;
(2) (desde C++17)
constexpr const T& operator*() const& noexcept;
(3) (desde C++17)
constexpr T& operator*() & noexcept;
(4) (desde C++17)
constexpr const T&& operator*() const&& noexcept;
(5) (desde C++17)
constexpr T&& operator*() && noexcept;
(6) (desde C++17)

Accede al valor contenido.

1,2) Devuelve un puntero al valor contenido.
3-6) Devuelve una referencia al valor contenido.

Si has_value() es false, el comportamiento es indefinido.

(hasta C++26)

Si has_value() es false:

(desde C++26)

Valor de retorno

1,2) val
3,4) * val
5,6) std :: move ( * val  )

Notas

Este operador no verifica si * this contiene un valor, los usuarios pueden hacerlo manualmente usando has_value() o operator bool() . Alternativamente, si se necesita acceso verificado, value() o value_or() pueden usarse.

Ejemplo

#include <iomanip>
#include <iostream>
#include <optional>
#include <string>
int main()
{
    using namespace std::string_literals;
    std::optional<int> opt1{1};
    std::cout << "opt1: " << *opt1 << '\n';
    *opt1 = 2;
    std::cout << "opt1: " << *opt1 << '\n';
    std::optional<std::string> opt2{"abc"s};
    std::cout << "opt2: " << std::quoted(*opt2) << ", size: " << opt2->size() << '\n';
    // Puedes "tomar" el valor contenido llamando a operator* en un rvalue de optional
    auto taken = *std::move(opt2);
    std::cout << "taken: " << std::quoted(taken) << "\n"
                 "opt2: " << std::quoted(*opt2) << ", size: " << opt2->size() << '\n';
}

Salida:

opt1: 1
opt1: 2
opt2: "abc", size: 3
taken: "abc"
opt2: "", size: 0

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2762 C++17 operator-> y operator* podrían ser potencialmente lanzadores de excepciones convertidos en noexcept

Véase también

devuelve el valor contenido
(función miembro pública)
devuelve el valor contenido si está disponible, otro valor en caso contrario
(función miembro pública)