Namespaces
Variants

std:: formatted_size

From cppreference.net
Défini dans l'en-tête <format>
template < class ... Args >
std:: size_t formatted_size ( std:: format_string < Args... > fmt, Args && ... args ) ;
(1) (depuis C++20)
template < class ... Args >
std:: size_t formatted_size ( std:: wformat_string < Args... > fmt, Args && ... args ) ;
(2) (depuis C++20)
template < class ... Args >

std:: size_t formatted_size ( const std:: locale & loc,

std:: format_string < Args... > fmt, Args && ... args ) ;
(3) (depuis C++20)
template < class ... Args >

std:: size_t formatted_size ( const std:: locale & loc,

std:: wformat_string < Args... > fmt, Args && ... args ) ;
(4) (depuis C++20)

Détermine le nombre total de caractères dans la chaîne formatée en formatant args selon la chaîne de format fmt . Si présent, loc est utilisé pour le formatage spécifique à la locale.

Le comportement n'est pas défini si std:: formatter < std:: remove_cvref_t < Ti > , CharT > ne satisfait pas aux exigences BasicFormatter pour tout Ti dans Args .

Table des matières

Paramètres

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 tels quels dans 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
loc - std::locale utilisé pour le formatage spécifique à la locale

Valeur de retour

Le nombre total de caractères dans la chaîne formatée.

Exceptions

Propage toute exception levée par le formateur.

Exemple

#include <format>
#include <iomanip>
#include <iostream>
#include <string_view>
#include <vector>
int main()
{
    using namespace std::literals::string_view_literals;
    constexpr auto fmt_str{"Hubble's H{0} {1} {2:*^4} miles/sec/mpc."sv};
    constexpr auto sub_zero{"\N{SUBSCRIPT ZERO}"sv}; // "₀" or {0342, 130, 128}
    constexpr auto aprox_equ{"\N{APPROXIMATELY EQUAL TO}"sv}; // "≅" or {0342, 137, 133}
    constexpr int Ho{42}; // H₀
    const auto min_buffer_size{std::formatted_size(fmt_str, sub_zero, aprox_equ, Ho)};
    std::cout << "Min buffer size = " << min_buffer_size << '\n';
    // Use std::vector as dynamic buffer. The buffer does not include the trailing '\0'.
    std::vector<char> buffer(min_buffer_size);
    std::format_to_n(buffer.data(), buffer.size(), fmt_str, sub_zero, aprox_equ, Ho);
    std::cout << "Buffer: "
              << std::quoted(std::string_view{buffer.data(), min_buffer_size})
              << '\n';
    // Print the buffer directly after adding the trailing '\0'.
    buffer.push_back('\0');
    std::cout << "Buffer: " << std::quoted(buffer.data()) << '\n';
}

Sortie :

Min buffer size = 37
Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."
Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."

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 tel que publié Comportement correct
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'y a 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)
é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)