Namespaces
Variants

std::expected<T,E>::operator bool, std::expected<T,E>::has_value

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Feature-Test-Makros der Bibliothek (C++20)
Programmdienstprogramme
Funktionen mit variabler Argumentanzahl
Koroutinenunterstützung (C++20)
Vertragsunterstützung (C++26)
Dreiseitiger Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationsoperatoren (veraltet in C++20)
Ganzzahlvergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Tausch und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabeltypen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
constexpr explicit operator bool() const noexcept;
(1) (seit C++23)
constexpr bool has_value() const noexcept;
(2) (seit C++23)

Überprüft, ob *this einen erwarteten Wert darstellt.

Rückgabewert

has_val

Hinweise

Ein std::expected -Objekt ist niemals wertlos. Wenn has_value() true zurückgibt, kann operator*() verwendet werden, um auf den erwarteten Wert zuzugreifen; andernfalls kann error() verwendet werden, um auf den unerwarteten Wert zuzugreifen.

Beispiel

#include <charconv>
#include <concepts>
#include <cstdint>
#include <expected>
#include <print>
#include <string>
#include <string_view>
#include <system_error>
template<std::integral Int = int>
constexpr std::expected<Int, std::string> to_int(std::string_view str)
{
    Int value{};
    const auto [_, ec] = std::from_chars(str.data(), str.data() + str.size(), value);
    if (ec == std::errc())
        return value;
    return std::unexpected{std::move(std::make_error_code(ec).message())};
}
int main()
{
    if (auto result = to_int("42"); result.has_value())
        std::println("{}", *result); // nach der Prüfung ist die Verwendung von operator* sicher
    else
        std::println("{}", result.error());
    if (const auto result = to_int("not a number"); result)
        std::println("{}", *result);
    else
        std::println("{}", result.error());
    if (const auto result{to_int<std::int16_t>("32768")}) // ruft implizit (1) auf
        std::println("{}", *result);
    else
        std::println("{}", result.error());
}

Mögliche Ausgabe:

42
Invalid argument
Numerical result out of range

Siehe auch

greift auf den erwarteten Wert zu
(öffentliche Elementfunktion)
gibt den unerwarteten Wert zurück
(öffentliche Elementfunktion)
prüft, ob das Objekt einen Wert enthält
(öffentliche Elementfunktion von std::optional<T> )