Espacios de nombres
Variantes

std::optional<T>::value_or

De cppreference.com
 
 
Biblioteca de servicios
 
 
<tbody> </tbody>
template< class U > constexpr T value_or( U&& default_value ) const&;
(1) (desde C++17)
template< class U > constexpr T value_or( U&& default_value ) &&;
(2) (desde C++17)

Devuelve el valor contenido si *this tiene un valor; de lo contrario, devuelve default_value.

1) Equivalente a bool(*this) ? **this : static_cast<T>(std::forward<U>(default_value))
2) Equivalente a bool(*this) ? std::move(**this) : static_cast<T>(std::forward<U>(default_value))

Parámetros

default_value - El valor a usar en caso que *this esté vacío.
Requisitos de tipo
-
T debe satisfacer los requisitos de CopyConstructible para poder usar la sobrecarga (1).
-
T debe satisfacer los requisitos de MoveConstructible para poder usar la sobrecarga (2).
-
U&& debe ser convertible a T

Valor de retorno

El valor actual si *this tiene un valor; de lo contrario, default_value.

Excepciones

Cualquier excepción lanzada por el constructor seleccionado del valor de retorno T.

Ejemplo

#include <optional>
#include <iostream>
#include <cstdlib>

std::optional<const char*> quiza_getenv(const char* n)
{
    if(const char* x = std::getenv(n))
       return x;
    else
       return {};
}

int main()
{
     std::cout << quiza_getenv("MYPWD").value_or("(ninguno)") << '\n';
}

Posible salida:

(ninguno)

Véase también

Devuelve el valor contenido.
(función miembro pública) [editar]