C++ named requirements: UnformattedOutputFunction
From cppreference.net
Exigences
Une UnformattedOutputFunction est une fonction de sortie de flux qui effectue les opérations suivantes :
1)
Construit un objet de type
basic_ostream::sentry
avec une durée de stockage automatique, qui effectue les opérations suivantes :
-
Si
eofbit
ou
badbit
sont activés sur le flux de sortie, active également le
failbit
et si les exceptions sur
failbitsont activées dans le masque d'exceptions de ce flux de sortie exception mask ( ( exceptions ( ) & failbit ) ! = 0 ), lance ios_base::failure . - Vide le flux de sortie associé via tie(), le cas échéant.
2)
Vérifie l'état de la sentinelle en appelant
sentry::operator bool()
, ce qui équivaut à
basic_ios::good
.
- Si l'opérateur retourne false ou si le constructeur de la sentinelle lève une exception, aucune sortie n'a lieu.
- Si l'opérateur retourne true , tente d'effectuer la sortie souhaitée en insérant les caractères dans le flux de sortie comme en appelant rdbuf ( ) - > sputc ( ) . D'autres membres publics de std::basic_ostream peuvent également être utilisés, mais les membres virtuels de rdbuf ( ) excepté overflow() , xsputn() et sync() ne seront jamais appelés.
-
-
Si une exception est levée pendant la sortie, positionne
badbitdans le flux de sortie. Si les exceptions surbadbitsont activées dans le masque d'exceptions de ce flux ( ( exceptions ( ) & badbit ) ! = 0 ), l'exception est également relancée. - Si aucune exception n'a été levée, retourne la valeur spécifiée par la fonction.
-
Si une exception est levée pendant la sortie, positionne
3)
Dans tous les cas, que la terminaison se fasse par exception ou par retour, le destructeur du sentinelle est appelé avant de quitter cette fonction.
Bibliothèque standard
Les fonctions standards de bibliothèque suivantes sont des UnformattedOutputFunction s .
- basic_ostream::operator<< (basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(depuis C++11) |
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 | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 63 | C++98 | la politique de gestion des exceptions était manquante | ajoutée |
| LWG 160 | C++98 |
le processus de détermination si l'exception attrapée
est relancée mentionnait une fonction inexistante
exception()
|
corrigé en exceptions() |
| LWG 165 | C++98 |
la seule fonction membre virtuelle autorisée à être
appelée sur rdbuf ( ) était
overflow()
|
également autorisé
xsputn()
et
sync()
|