Namespaces
Variants

std::ios_base:: failure

From cppreference.net
Défini dans l'en-tête <ios>
class failure ;

La classe std::ios_base::failure définit un objet d'exception qui est levé en cas d'échec par les fonctions de la bibliothèque d'Entrée/Sortie.

std::ios_base::failure peut être défini soit comme une classe membre de std::ios_base soit comme un synonyme (typedef) d'une autre classe avec une fonctionnalité équivalente.

(depuis C++17)
cpp/error/exception std-ios base-failure-2003-inheritance.svg

Diagramme d'héritage

(jusqu'en C++11)
cpp/error/exception cpp/error/runtime error cpp/error/system error std-ios base-failure-inheritance.svg

Diagramme d'héritage

(depuis C++11)

Table des matières

Fonctions membres

(constructeur)
construit un nouvel objet failure avec le message donné
(fonction membre publique)
operator=
remplace l'objet failure
(fonction membre publique)
what
retourne la chaîne explicative
(fonction membre publique)

std::ios_base::failure:: failure

(1)
explicit failure ( const std:: string & message ) ;
(jusqu'à C++11)
explicit failure ( const std:: string & message,
const std:: error_code & ec = std:: io_errc :: stream ) ;
(depuis C++11)
explicit failure ( const char * message,
const std:: error_code & ec = std:: io_errc :: stream ) ;
(2) (depuis C++11)
(3)
failure ( const failure & other ) ;
(jusqu'à C++11)
failure ( const failure & other ) noexcept ;
(depuis C++11)
1,2) Construit l'objet exception en utilisant message comme chaîne d'explication qui peut être récupérée ultérieurement avec what() . ec est utilisé pour identifier la raison spécifique de l'échec. (depuis C++11)
3) Constructeur de copie. Initialise le contenu avec celui de other . Si * this et other ont tous deux le type dynamique std::ios_base::failure alors std:: strcmp ( what ( ) , other. what ( ) ) == 0 . (depuis C++11)

Paramètres

message - chaîne explicative
ec - code d'erreur pour identifier la raison spécifique de l'échec
other - un autre failure à copier

Notes

Comme la copie de std::ios_base::failure 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 faudrait de toute façon copier le contenu.

std::ios_base::failure:: operator=

failure & operator = ( const failure & other ) ;
(jusqu'à C++11)
failure & operator = ( const failure & other ) noexcept ;
(depuis C++11)

Assigne le contenu avec celui de other . Si * this et other ont tous deux le type dynamique std::ios_base::failure alors std:: strcmp ( what ( ) , other. what ( ) ) == 0 après l'assignation. (depuis C++11)

Paramètres

other - autre objet d'exception à assigner

Valeur de retour

* this

std::ios_base::failure:: what

virtual const char * what ( ) const throw ( ) ;
(jusqu'à C++11)
virtual const char * what ( ) const noexcept ;
(depuis C++11)

Retourne la chaîne explicative.

Valeur de retour

Pointeur vers une chaîne à zéro terminal définie par l'implémentation contenant des informations explicatives. La chaîne est adaptée à la conversion et à l'affichage en tant que std::wstring . Le pointeur est garanti valide au moins jusqu'à la destruction de l'objet exception duquel il est obtenu, ou jusqu'à l'appel d'une fonction membre non constante (par exemple l'opérateur d'affectation par copie) sur l'objet exception.

Notes

Les implémentations sont autorisées mais non obligées de redéfinir what() .

Hérité de std:: system_error

Fonctions membres

retourne le code d'erreur
(fonction membre publique de std::system_error )
[virtual]
retourne une chaîne explicative
(fonction membre publique virtuelle de std::system_error )

Hérité de std:: exception

Fonctions membres

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

Notes

Avant la résolution de LWG issue 331 , std::ios_base::failure déclarait un destructeur sans throw ( ) , alors que std::exception::~exception() était déclaré avec throw ( ) [1] . Cela signifie que std::ios_base::failure::~failure() avait une spécification d'exception plus faible. La résolution consiste à supprimer cette déclaration afin de conserver la spécification d'exception non levante.

LWG issue 363 cible le même défaut et sa résolution consiste à ajouter throw ( ) à la déclaration de std::ios_base::failure::~failure() . Cette résolution n'a pas été appliquée en raison du conflit entre les deux résolutions.

  1. La spécification d'exception non-lançante est maintenant appliquée globalement à travers la bibliothèque standard , donc les destructeurs des classes de la bibliothèque standard ne sont pas déclarés avec throw ( ) ou noexcept .

Exemple

#include <fstream>
#include <iostream>
int main()
{
    std::ifstream f("doesn't exist");
    try
    {
        f.exceptions(f.failbit);
    }
    catch (const std::ios_base::failure& e)
    {
        std::cout << "Caught an ios_base::failure.\n"
                  << "Explanatory string: " << e.what() << '\n'
                  << "Error code: " << e.code() << '\n';
    }
}

Sortie possible :

Caught an ios_base::failure.
Explanatory string: ios_base::clear: unspecified iostream_category error
Error code: iostream:1

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 48 C++98 la surcharge du constructeur (1) initialisait la classe de base std::exception
avec msg , mais la classe de base ne possède pas de constructeur correspondant
description correspondante
supprimée
LWG 331 C++98 std::ios_base::failure déclarait un destructeur sans throw ( ) a supprimé la déclaration du destructeur

Voir aussi

(C++11)
les codes d'erreur des flux d'E/S
(enum)