Namespaces
Variants

std:: format_error

From cppreference.net
Défini dans l'en-tête <format>
class format_error : public runtime_error
(depuis C++20)

Définit le type d'objet d'exception levé pour signaler des erreurs dans la bibliothèque de formatage.

Toutes les fonctions membres de std::format_error sont constexpr : il est possible de créer et d'utiliser des objets std::format_error lors de l'évaluation d'une expression constante.

Cependant, les objets std::format_error ne peuvent généralement pas être constexpr , car toute allocation de mémoire dynamique doit être libérée lors de la même évaluation d'expression constante.

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

Diagramme d'héritage

Table des matières

Fonctions membres

(constructeur)
construit un nouvel objet format_error avec le message donné
(fonction membre publique)
operator=
remplace l'objet format_error
(fonction membre publique)

std::format_error:: format_error

format_error ( const std:: string & what_arg ) ;
(1) (constexpr depuis C++26)
format_error ( const char * what_arg ) ;
(2) (constexpr depuis C++26)
format_error ( const format_error & other ) noexcept ;
(3) (constexpr depuis C++26)
1) Construit l'objet d'exception avec what_arg comme chaîne explicative. Après construction, std:: strcmp ( what ( ) , what_arg. c_str ( ) ) == 0 .
2) Construit l'objet d'exception avec what_arg comme chaîne explicative. Après construction, std:: strcmp ( what ( ) , what_arg ) == 0 .
3) Constructeur de copie. Si * this et other ont tous deux le type dynamique std::format_error alors std:: strcmp ( what ( ) , other. what ( ) ) == 0 . Aucune exception ne peut être levée depuis le constructeur de copie.

Paramètres

what_arg - chaîne explicative
other - un autre objet d'exception à copier

Exceptions

1,2) Peut lever std::bad_alloc .

Notes

Comme la copie de std::format_error n'est pas autorisée à lever des exceptions, ce message est généralement stocké en interne sous forme de chaîne à comptage de référence allouée séparément. C'est aussi pourquoi il n'y a pas de constructeur prenant std::string&& : il devrait de toute façon copier le contenu.

Une classe d'exception standard dérivée doit avoir un constructeur de copie accessible publiquement. Il peut être implicitement défini tant que les chaînes explicatives obtenues par what() sont les mêmes pour l'objet original et l'objet copié.

std::format_error:: operator=

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

Assigne le contenu avec celui de other . Si * this et other ont tous deux le type dynamique std::format_error alors std:: strcmp ( what ( ) , other. what ( ) ) == 0 après l'assignation. Aucune exception ne peut être levée par l'opérateur d'assignation de copie.

Paramètres

other - un autre objet exception à assigner

Valeur de retour

* this

Notes

Une classe d'exception standard dérivée doit avoir un opérateur d'assignation de copie accessible publiquement. Il peut être défini implicitement tant que les chaînes explicatives obtenues par what() sont les mêmes pour l'objet original et l'objet copié.

Hérité de std:: exception

Fonctions membres

[virtual]
détruit l'objet exception
(fonction membre publique virtuelle de std::exception )
[virtual]
retourne une chaîne explicative
(fonction membre publique virtuelle de std::exception )

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr types d'exception

Exemple

#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); // lève une exception
    }
    catch(const std::format_error& ex)
    {
        std::println("{}", ex.what());
    }
}

Sortie possible :

format error: failed to parse format-spec

Voir aussi