Namespaces
Variants

std::expected<T,E>::operator->, std::expected<T,E>::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 de 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)
 
 
Plantilla principal
constexpr const T* operator->() const noexcept;
(1) (desde C++23)
constexpr T* operator->() noexcept;
(2) (desde C++23)
constexpr const T& operator*() const& noexcept;
(3) (desde C++23)
constexpr T& operator*() & noexcept;
(4) (desde C++23)
constexpr const T&& operator*() const&& noexcept;
(5) (desde C++23)
constexpr T&& operator*() && noexcept;
(6) (desde C++23)
void especialización parcial
constexpr void operator*() const noexcept;
(7) (desde C++23)

Accede al valor esperado contenido en *this.

1,2) Devuelve un puntero al valor esperado.
3-6) Devuelve una referencia al valor esperado.
7) No devuelve nada.

Si has_value() es false, el comportamiento no está definido.

(hasta C++26)

Si has_value() es false:

(desde C++26)

Valor de retorno

3,4) val
5,6) std :: move ( val  )

Notas

Estos operadores no verifican si el optional representa un valor esperado, los usuarios pueden hacerlo manualmente usando has_value() o operator bool() . Alternativamente, si se necesita acceso verificado, value() o value_or() pueden ser utilizados.

Ejemplo

#include <cassert>
#include <expected>
#include <iomanip>
#include <iostream>
#include <string>
int main()
{
    using namespace std::string_literals;
    std::expected<int, std::string> ex1 = 6;
    assert(*ex1 == 6);
    *ex1 = 9;
    assert(*ex1 == 9);
    // *ex1 = "error"s; // error, ex1 contiene un valor esperado de tipo int
    ex1 = std::unexpected("error"s);
    // *ex1 = 13; // Comportamiento indefinido, ex1 contiene un valor inesperado
    assert(ex1.value_or(42) == 42);
    std::expected<std::string, bool> ex2 = "Moon"s;
    std::cout << "ex2: " << std::quoted(*ex2) << ", tamaño: " << ex2->size() << '\n';
    // Puedes "tomar" el valor esperado llamando a operator* en un rvalue de std::expected
    auto taken = *std::move(ex2);
    std::cout << "tomado " << std::quoted(taken) << "\n"
                 "ex2: " << std::quoted(*ex2) << ", tamaño: " << ex2->size() << '\n';
}

Salida posible:

ex2: "Moon", size: 4
taken "Moon"
ex2: "", size: 0

Véase también

devuelve el valor esperado
(función miembro pública)
devuelve el valor esperado si está presente, otro valor en caso contrario
(función miembro pública)
verifica si el objeto contiene un valor esperado
(función miembro pública)
devuelve el valor inesperado
(función miembro pública)