Namespaces
Variants

std:: vprint_unicode, std:: vprint_unicode_buffered

From cppreference.net
< cpp ‎ | io
Print functions
Print functions
(C++23)
(C++23)
vprint_unicode vprint_unicode_buffered
(C++23) (C++23)
Défini dans l'en-tête <print>
void vprint_unicode ( std:: FILE * stream,
std:: string_view fmt, std:: format_args args ) ;
(1) (depuis C++23)
void vprint_unicode_buffered ( std:: FILE * stream,
std:: string_view fmt, std:: format_args args ) ;
(2) (depuis C++23)
void vprint_unicode_buffered ( std:: string_view fmt, std:: format_args args ) ;
(3) (depuis C++23)

Formate args selon la chaîne de format fmt , et écrit le résultat dans le flux de sortie.

1) Effectue les opérations suivantes dans l'ordre :
  1. Verrouille stream .
  2. Soit out la représentation caractère des arguments de formatage fournis par args formatés selon les spécifications données dans fmt .
  3. Écrit out dans stream :
  • Si stream fait référence à un terminal capable d'afficher Unicode uniquement via une API Unicode native , vide le tampon de stream et écrit out dans le terminal en utilisant l'API Unicode native.
  • Sinon, écrit out non modifié dans le stream .
Déverrouille inconditionnellement stream à la sortie de la fonction.
Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
  • stream n'est pas un pointeur valide vers un flux de sortie C.
  • out contient des unités de code Unicode non valides lorsque l'API Unicode native est utilisée.
2) Équivalent à std:: string out = std:: vformat ( fmt, args ) ;
std :: vprint_unicode ( stream, "{}" , std:: make_format_args ( out ) ) ;
.
3) Équivalent à std :: vprint_unicode_buffered ( stdout , fmt, args ) .


Après avoir écrit des caractères dans le flux de sortie, établit un point de contrôle observable .

(since C++26)

Table des matières

Paramètres

stream - flux de fichier de sortie vers lequel écrire
fmt - un objet qui représente la chaîne de format. La chaîne de format est constituée de
  • caractères ordinaires (sauf { et } ), qui sont copiés inchangés vers la sortie,
  • séquences d'échappement { { et } } , qui sont remplacées respectivement par { et } dans la sortie, et
  • champs de remplacement.

Chaque champ de remplacement a le format suivant :

{ arg-id (optionnel) } (1)
{ arg-id (optionnel) : format-spec } (2)
1) champ de remplacement sans spécification de format
2) champ de remplacement avec spécification de format
arg-id - spécifie l'index de l'argument dans args dont la valeur doit être utilisée pour le formatage ; s'il est omis, les arguments sont utilisés dans l'ordre.

Les arg-id  dans une chaîne de format doivent tous être présents ou tous être omis. Mélanger l'indexation manuelle et automatique est une erreur.

format-spec - la spécification de format définie par la spécialisation std::formatter pour l'argument correspondant. Ne peut pas commencer par } .

(depuis C++23)
(depuis C++26)
  • Pour les autres types formatables, la spécification de format est déterminée par les spécialisations formatter définies par l'utilisateur.
args - arguments à formater

Exceptions

Notes

La norme C++ encourage les implémenteurs à produire un message de diagnostic si out contient des unités de code Unicode invalides.

Sur POSIX, l'écriture vers un terminal s'effectue en utilisant les fonctions standard d'E/S habituelles, il n'est donc pas nécessaire de traiter un terminal différemment de tout autre flux de fichier.

Sur Windows, le flux fait référence à un terminal si GetConsoleMode ( _get_osfhandle ( _fileno ( stream ) ) ) renvoie une valeur non nulle (consultez la documentation Windows pour GetConsoleMode , _get_osfhandle , et _fileno ). L'API Unicode native sur Windows est WriteConsoleW .

Si l'invocation de l'API Unicode native nécessite un transcodage, les unités de code non valides sont remplacées par U+FFFD CARACTÈRE DE REMPLACEMENT (voir "The Unicode Standard - Core Specification", Chapitre 3.9 ).

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_print 202207L (C++23) Sortie formatée
202403L (C++26)
(DR23)
Sortie formatée non tamponnée
202406L (C++26)
(DR23)
Activation de la sortie formatée non tamponnée pour plus de types formatables
__cpp_lib_format 202207L (C++23) Exposition de std::basic_format_string

Exemple

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 4044 C++23 l'API Unicode native était toujours utilisée si le
terminal référencé par stream peut afficher l'Unicode
uniquement utilisé si le terminal ne peut utiliser
que l'API Unicode native pour afficher l'Unicode
P3107R5 C++23 les opérations d'impression étaient toujours mises en mémoire tampon fournit des opérations d'impression sans mémoire tampon
P3235R3 C++23 les noms des fonctions ajoutées
par P3107R5 étaient trompeurs
a modifié les noms des fonctions

Voir aussi

imprime vers stdout ou un flux de fichier en utilisant type-erased la représentation des arguments
(fonction)
effectue une sortie compatible Unicode en utilisant type-erased la représentation des arguments
(fonction)
(C++23)
imprime vers stdout ou un flux de fichier en utilisant formatted la représentation des arguments
(modèle de fonction)
(C++20)
stocke la représentation formatée des arguments dans une nouvelle chaîne
(modèle de fonction)

Liens externes

1. Unicode
2. Norme Unicode Version 14.0 - Spécification Principale