Namespaces
Variants

std:: format_error

From cppreference.net
Definiert im Header <format>
class format_error : public runtime_error
(seit C++20)

Definiert den Typ des Ausnahmeobjekts, das zur Meldung von Fehlern in der Formatierungsbibliothek ausgelöst wird.

Alle Memberfunktionen von std::format_error sind constexpr : Es ist möglich, std::format_error -Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Allerdings können std::format_error -Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch allokierte Speicher in derselben Auswertung des konstanten Ausdrucks freigegeben werden muss.

(seit C++26)
cpp/error/exception cpp/error/runtime error std-format error-inheritance.svg

Vererbungsdiagramm

Inhaltsverzeichnis

Memberfunktionen

(Konstruktor)
Konstruiert ein neues format_error Objekt mit der angegebenen Nachricht
(Öffentliche Mitgliedsfunktion)
operator=
Ersetzt das format_error Objekt
(Öffentliche Mitgliedsfunktion)

std::format_error:: format_error

format_error ( const std:: string & what_arg ) ;
(1) (constexpr seit C++26)
format_error ( const char * what_arg ) ;
(2) (constexpr seit C++26)
format_error ( const format_error & other ) noexcept ;
(3) (constexpr seit C++26)
1) Konstruiert das Ausnahmeobjekt mit what_arg als erklärender Zeichenkette. Nach der Konstruktion gilt std:: strcmp ( what ( ) , what_arg. c_str ( ) ) == 0 .
2) Konstruiert das Ausnahmeobjekt mit what_arg als erklärender Zeichenkette. Nach der Konstruktion gilt std:: strcmp ( what ( ) , what_arg ) == 0 .
3) Kopierkonstruktor. Wenn * this und other beide den dynamischen Typ std::format_error haben, dann gilt std:: strcmp ( what ( ) , other. what ( ) ) == 0 . Vom Kopierkonstruktor können keine Ausnahmen geworfen werden.

Parameter

what_arg - erklärende Zeichenkette
other - ein weiteres Ausnahmeobjekt zum Kopieren

Ausnahmen

1,2) Kann std::bad_alloc werfen.

Anmerkungen

Da das Kopieren von std::format_error keine Ausnahmen werfen darf, wird diese Nachricht typischerweise intern als separat alloziierte referenzgezählte Zeichenkette gespeichert. Dies ist auch der Grund, warum es keinen Konstruktor gibt, der std::string&& akzeptiert: Der Inhalt müsste ohnehin kopiert werden.

Eine abgeleitete Standardausnahmeklasse muss einen öffentlich zugänglichen Kopierkonstruktor besitzen. Dieser kann implizit definiert werden, solange die durch what() erhaltenen erklärenden Zeichenketten für das Originalobjekt und das kopierte Objekt identisch sind.

std::format_error:: operator=

format_error & operator = ( const format_error & other ) noexcept ;
(constexpr seit C++26)

Weist die Inhalte mit denen von other zu. Wenn * this und other beide den dynamischen Typ std::format_error haben, dann ist std:: strcmp ( what ( ) , other. what ( ) ) == 0 nach der Zuweisung. Vom Kopierzuweisungsoperator kann keine Exception geworfen werden.

Parameter

other - ein weiteres Exception-Objekt, mit dem zugewiesen wird

Rückgabewert

* this

Anmerkungen

Eine abgeleitete Standard-Exception-Klasse muss einen öffentlich zugänglichen Kopierzuweisungsoperator haben. Er kann implizit definiert werden, solange die erklärenden Zeichenketten, die durch what() erhalten werden, für das ursprüngliche Objekt und das kopierte Objekt gleich sind.

Geerbt von std:: exception

Elementfunktionen

[virtual]
zerstört das Exception-Objekt
(virtuelle öffentliche Elementfunktion von std::exception )
[virtual]
gibt einen erläuternden String zurück
(virtuelle öffentliche Elementfunktion von std::exception )

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr Exception-Typen

Beispiel

#include <format>
#include <print>
#include <string_view>
#include <utility>
int main()
{
    try
    {
        auto x13{37};
        auto args{std::make_format_args(x13)};
        std::ignore = std::vformat("{:()}", args); // wirft Exception
    }
    catch(const std::format_error& ex)
    {
        std::println("{}", ex.what());
    }
}

Mögliche Ausgabe:

format error: failed to parse format-spec

Siehe auch