close
Espacios de nombres
Variantes

std::expected<T,E>::operator->, std::expected<T,E>::operator*

De cppreference.com
 
 
Biblioteca de servicios
 
 
<tbody> </tbody>
Plantilla primaria
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)
Especialización parcial void
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:

  • Si la implementación está reforzada, se produce una violación de contrato.
  • Si la implementación no está reforzada, el comportamiento no está definido.
(desde C++26)

Valor de retorno

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

Notas

Estos operadores no verifican si el opcional representa un valor esperado; los usuarios pueden hacerlo manualmente utilizando has_value() o operator bool(). Alternativamente, si se requiere acceso verificado, puede utilizarse value() o value_or().

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; // UB, ex1 contiene un valor no esperado
    assert(ex1.value_or(42) == 42);
    
    std::expected<std::string, bool> ex2 = "Luna"s;
    std::cout << "ex2: " << std::quoted(*ex2) << ", tamaño: " << ex2->size() << '\n';
    
    // Puedes "tomar" el valor esperado al llamar a operator* en un r-valor std::expected
    
    auto taken = *std::move(ex2);
    std::cout << std::quoted(taken) << " tomada\n"
                 "ex2: " << std::quoted(*ex2) << ", tamaño: " << ex2->size() << '\n';
}

Posible salida:

ex2: "Luna", tamaño: 4
"Luna" tomada
ex2: "", tamaño: 0

Véase también

Devuelve el valor expected.
(función miembro pública) [editar]
Devuelve el valor expected si está presente. De lo contrario, otro valor.
(función miembro pública) [editar]
Comprueba si el objeto contiene un valor esperado.
(función miembro pública) [editar]
Devuelve el valor no esperado.
(función miembro pública) [editar]