Namespaces
Variants

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

From cppreference.net
Utilities library
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 es indefinido.

(hasta C++26)

Si has_value() es false :

  • Si la implementación está reforzada , ocurre una violación de contrato . Además, si el manejador de violación de contrato retorna bajo semántica de evaluación "observar", el comportamiento es indefinido.
  • Si la implementación no está reforzada, el comportamiento es indefinido.
(desde C++26)

Contenidos

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)