std::ios_base:: failure
|
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.
|
|
(depuis C++17) |
|
Diagramme d'héritage |
(jusqu'en C++11) |
|
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) | |
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:: runtime_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.
- ↑ 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) |