std:: format
|
Défini dans l'en-tête
<format>
|
||
|
template
<
class
...
Args
>
std:: string format ( std:: format_string < Args... > fmt, Args && ... args ) ; |
(1) | (depuis C++20) |
|
template
<
class
...
Args
>
std:: wstring format ( std:: wformat_string < Args... > fmt, Args && ... args ) ; |
(2) | (depuis C++20) |
|
template
<
class
...
Args
>
std::
string
format
(
const
std::
locale
&
loc,
|
(3) | (depuis C++20) |
|
template
<
class
...
Args
>
std::
wstring
format
(
const
std::
locale
&
loc,
|
(4) | (depuis C++20) |
Formate args selon la chaîne de format fmt , et retourne le résultat sous forme de chaîne. S'il est présent, loc est utilisé pour le formatage spécifique aux paramètres régionaux.
La chaîne de format
fmt
est vérifiée à la compilation
sauf si elle est initialisée à partir du résultat de
std::runtime_format
(depuis C++26)
. Si, à la compilation, la chaîne de format est jugée invalide pour les types des arguments à formater, une erreur de compilation sera générée.
Les exigences suivantes s'appliquent à chaque type
T
dans
Args
, où
CharT
est
char
pour les surcharges
(1,3)
,
wchar_t
pour les surcharges
(2,4)
:
- std:: formatter < T, CharT > doit satisfaire BasicFormatter
- std:: formatter < T, CharT > :: parse ( ) doit être constexpr à des fins de vérification de chaîne de format à la compilation.
Table des matières |
Paramètres
| fmt | - |
Chaque champ de remplacement a le format suivant :
1)
champ de remplacement sans spécification de format
2)
champ de remplacement avec spécification de format
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | arguments à formater | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale utilisé pour le formatage spécifique à la locale | ||||||||||||||||||||||||||||||||||||||||||||||
Valeur de retour
Un objet chaîne contenant le résultat formaté.
Exceptions
Lève std::bad_alloc en cas d'échec d'allocation. Propage également toute exception levée par un formateur.
Notes
Il n'est pas une erreur de fournir plus d'arguments que ce que la chaîne de format requiert :
std::format("{} {}!", "Hello", "world", "something"); // OK, produit "Hello world!"
C'est une erreur si la chaîne de format n'est pas une expression constante
sauf si elle est initialisée à partir du résultat de
std::runtime_format
(depuis C++26)
.
std::vformat
n'a pas cette exigence.
std::string f1(std::string_view runtime_format_string) { // return std::format(runtime_format_string, "x", 42); // erreur char v1[] = "x"; int v2 = 42; return std::vformat(runtime_format_string, std::make_format_args(v1, v2)); // OK } std::string f2(std::string_view runtime_format_string) { return std::format(std::runtime_format(runtime_format_string), "x", 42); // OK (C++26) }
Exemple
#include <format> #include <iostream> #include <set> #include <string> #include <string_view> template<typename... Args> std::string dyna_print(std::string_view rt_fmt_str, Args&&... args) { return std::vformat(rt_fmt_str, std::make_format_args(args...)); } int main() { #ifdef __cpp_lib_format_ranges const std::set<std::string_view> continents { "Africa", "America", "Antarctica", "Asia", "Australia", "Europe" }; std::cout << std::format("Hello {}!\n", continents); #else std::cout << std::format("Hello {}!\n", "continents"); #endif std::string fmt; for (int i{}; i != 3; ++i) { fmt += "{} "; // construit la chaîne de formatage std::cout << fmt << " : "; std::cout << dyna_print(fmt, "alpha", 'Z', 3.14, "unused"); std::cout << '\n'; } }
Sortie possible :
Hello {"Africa", "America", "Antarctica", "Asia", "Australia", "Europe"}!
{} : alpha
{} {} : alpha Z
{} {} {} : alpha Z 3.14
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é |
|---|---|---|---|
| P2216R3 | C++20 | lève std::format_error pour une chaîne de format invalide | une chaîne de format invalide génère une erreur à la compilation |
| P2418R2 | C++20 |
les objets qui ne sont ni const-utilisables ni copiables
(tels que les objets de type générateur) ne sont pas formatables |
permettre le formatage de ces objets |
| P2508R1 | C++20 | il n'existe pas de nom visible par l'utilisateur pour cette fonctionnalité |
le nom
basic_format_string
est exposé
|
Voir aussi
|
(C++20)
|
écrit la représentation formatée de ses arguments via un itérateur de sortie
(modèle de fonction) |
|
(C++20)
|
écrit la représentation formatée de ses arguments via un itérateur de sortie, sans dépasser la taille spécifiée
(modèle de fonction) |