Namespaces
Variants

C++ named requirements: FormattedOutputFunction

From cppreference.net
C++ named requirements

Table des matières

Exigences

Une FormattedOutputFunction est une fonction membre de std::basic_ostream ou une fonction non membre impliquant std::basic_ostream qui effectue les opérations suivantes :

  1. Construit un objet sentry de type std::basic_ostream::sentry .
  2. Si bool ( sentry ) est 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.
  3. Détruit sentry et retourne * this .

Si sentry ne parvient pas à être construit, ou si bool ( sentry ) est false , aucune sortie n'a lieu.

Si la sortie n'a pas pu être générée, appelle setstate ( std:: ios_base :: failbit ) , ce qui peut lever une exception.

Si une exception est levée pendant la sortie, alors std:: ios_base :: badbit est défini dans l'état d'erreur de * this sans provoquer le lancement d'une std::ios_base::failure . Si les exceptions sur badbit sont activées dans le masque d'exceptions de ce flux (c'est-à-dire, ( exceptions ( ) & badbit ) ! = 0 ), l'exception est également relancée.

Lorsqu'une exception est levée depuis la fonction de sortie formatée, sentry est également détruit avant de quitter la fonction.

Remplissage

Les fonctions de sortie formatée déterminent le remplissage conformément à std::num_put::do_put() étape 3.

(jusqu'en C++14)

Si une fonction de sortie formatée d'un flux os détermine le remplissage, elle procède comme suit.

Étant donné une séquence de caractères CharT seq CharT est le type de conteneur de caractères de os , si la longueur de seq est inférieure à os. width ( ) , alors suffisamment de copies de os. fill ( ) sont ajoutées à cette séquence si nécessaire pour atteindre une largeur de os. width ( ) caractères.

Si ( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left est true , les caractères de remplissage sont placés après la séquence de caractères ; sinon, ils sont placés avant la séquence de caractères.

(depuis C++14)

Bibliothèque standard

Les fonctions standards suivantes de la bibliothèque sont des FormattedOutputFunction s .

(depuis C++17)
sauf que (étant donné os est un objet de flux de sortie) :
  • toute exception levée par l'appel à std::vformat est propagée sans tenir compte de la valeur de os. exceptions ( ) et sans activer ios_base::badbit dans l'état d'erreur de os ;
  • si l'insertion dans os échoue, appelle os. setstate ( ios_base :: badbit ) (ce qui peut lever ios_base::failure ).
(depuis C++23)

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 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 virtuelle autorisée à être
appelée sur rdbuf ( ) était overflow()
également autorisé
xsputn() et sync()