Namensräume
Varianten
Aktionen

std::unerwartet

Von cppreference.com
< cpp‎ | utility‎ | expected
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
Definiert in der Header-Datei <expected>
template< class E >
class unerwartet;
(seit C++23)

Die Klassenschablone std::unexpected repräsentiert einen unerwarteten Wert, der in std::expected gespeichert ist. Insbesondere hat std::expected Konstruktoren mit std::unexpected als einzigem Argument, welche ein expected Objekt erstellen, das einen unerwarteten Wert enthält.

Ein Programm ist schlecht geformt, wenn es eine unexpected-Instanz mit einem Nicht-Objekttyp, einem Array-Typ, einer Spezialisierung von std::unexpected oder einem cv-qualifizierten Typ instanziiert.

Inhalt

[bearbeiten] Schablonenparameter

E - der Typ des unerwarteten Wertes. Der Typ darf kein Array-Typ, kein Nicht-Objekttyp, keine Spezialisierung von std::unexpected oder ein cv-qualifizierter Typ sein.

[bearbeiten] Member-Funktionen

konstruiert das unexpected Objekt
(öffentliche Memberfunktion)
(Destruktor)
(implizit deklariert)
zerstört das unexpected Objekt zusammen mit dem gespeicherten Wert
(öffentliche Memberfunktion)
operator=
(implizit deklariert)
weist den gespeicherten Wert zu
(öffentliche Memberfunktion)
greift auf den gespeicherten Wert zu
(öffentliche Memberfunktion)
tauscht den gespeicherten Wert
(öffentliche Memberfunktion)

[bearbeiten] Nicht-Member-Funktionen

vergleicht den gespeicherten Wert
(function template)
spezialisiert den Algorithmus std::swap
(function template)

std::unexpected::unerwartet

constexpr unerwartet( const unerwartet& ) = default;
(1)
constexpr unerwartet( unerwartet&& ) = default;
(2)
template< class Err = E >
constexpr explicit unerwartet( Err&& e );
(3)
template< class... Args >
constexpr explicit unerwartet( std::in_place_t, Args&&... args );
(4)
template< class U, class... Args >

constexpr explicit unerwartet( std::in_place_t,

                               std::initializer_list<U> il, Args&&... args );
(5)

Konstruiert ein std::unexpected Objekt.

1,2) Kopier-/Move-Konstruktor. Kopiert bzw. verschiebt den gespeicherten Wert.
3) Konstruiert den gespeicherten Wert, als ob durch direkte Initialisierung eines Wertes vom Typ E aus std::forward<Err>(e).
4) Konstruiert den gespeicherten Wert, als ob durch direkte Initialisierung eines Wertes vom Typ E aus den Argumenten std::forward<Args>(args)....
5) Konstruiert den gespeicherten Wert, als ob durch direkte Initialisierung eines Wertes vom Typ E aus den Argumenten il, std::forward<Args>(args)....

Parameter

e - Wert, mit dem der enthaltene Wert initialisiert werden soll
args... - Argumente, mit denen der enthaltene Wert initialisiert werden soll
il - Initialisierungsliste, mit der der enthaltene Wert initialisiert werden soll

Ausnahmen

Wirft jede Ausnahme, die vom Konstruktor von E geworfen wird.

std::unexpected::error

constexpr const E& error() const& noexcept;

constexpr E& error() & noexcept;
constexpr const E&& error() const&& noexcept;

constexpr E&& error() && noexcept;

Gibt eine Referenz auf den gespeicherten Wert zurück.

std::unexpected::swap

constexpr void swap( unerwartet& other ) noexcept(std::is_nothrow_swappable_v<E>);

Tauscht die gespeicherten Werte, als ob durch using std::swap; swap(error(), other.error());.

Das Programm ist schlecht geformt, wenn std::is_swappable_v<E> falsch ist.

operator==(std::unexpected)

template< class E2 >
friend constexpr bool operator==( unerwartet& x, std::unerwartet<E2>& y );

Vergleicht die gespeicherten Werte, als ob durch return x.error() == y.error().

Wenn der Ausdruck x.error() == e.error() nicht gut geformt ist, oder wenn sein Ergebnis nicht in bool konvertierbar ist, ist das Programm schlecht geformt.

Diese Funktion ist für die normale unqualifizierte oder qualifizierte Suche nicht sichtbar und kann nur durch Argument-abhängige Suche gefunden werden, wenn std::unexpected<E> eine zugeordnete Klasse der Argumente ist.

swap(std::unexpected)

friend constexpr void
swap( unerwartet& x, unerwartet& y ) noexcept(noexcept(x.swap(y)));

Entspricht x.swap(y).

Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std::is_swappable_v<E> wahr ist.

Diese Funktion ist für die normale unqualifizierte oder qualifizierte Suche nicht sichtbar und kann nur durch Argument-abhängige Suche gefunden werden, wenn std::unexpected<E> eine zugeordnete Klasse der Argumente ist.

[bearbeiten] Deduktions-Guides

template< class E >
unerwartet(E) -> unerwartet<E>;
(seit C++23)

Der Deduktions-Guide wird für unexpected bereitgestellt, um die Deduktion aus dem Konstruktorargument zu ermöglichen.

[bearbeiten] Hinweise

Vor C++17 bezeichnete der Name std::unexpected die Funktion, die von der C++-Laufzeit aufgerufen wurde, wenn eine dynamische Ausnahmespezifikation verletzt wurde.

[bearbeiten] Beispiel

#include <expected>
#include <iostream>
 
enum class error
{
    compile_time_error,
    runtime_error
};
 
[[nodiscard]] auto unexpected_runtime_error() -> std::expected<int, error>
{
    return std::unexpected(error::runtime_error);
}
 
int main()
{
    std::expected<double, int> ex = std::unexpected(3);
 
    if (!ex)
        std::cout << "ex contains an error value\n";
 
    if (ex == std::unexpected(3))
        std::cout << "The error value is equal to 3\n";
 
    const auto e = unexpected_runtime_error();
 
    e.and_then([](const auto& e) -> std::expected<int, error>
    {
        std::cout << "and_then: " << int(e); // not printed
        return {};
    })
    .or_else([](const auto& e) -> std::expected<int, error>
    {
        std::cout << "or_else: " << int(e); // prints this line
        return {};
    });
}

Ausgabe

ex contains an error value
The error value is equal to 3
or_else: 1

[bearbeiten] Siehe auch

konstruiert das expected-Objekt
(öffentliche Mitgliedsfunktion) [bearbeiten]
vergleicht expected Objekte
(function template) [bearbeiten]