Namespaces
Variants

std:: formatted_size

From cppreference.net
Definido en el encabezado <format>
template < class ... Args >
std:: size_t formatted_size ( std:: format_string < Args... > fmt, Args && ... args ) ;
(1) (desde C++20)
template < class ... Args >
std:: size_t formatted_size ( std:: wformat_string < Args... > fmt, Args && ... args ) ;
(2) (desde C++20)
template < class ... Args >

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

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

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

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

Determine el número total de caracteres en la cadena formateada mediante el formato de args de acuerdo con la cadena de formato fmt . Si está presente, loc se utiliza para el formato específico de la configuración regional.

El comportamiento no está definido si std:: formatter < std:: remove_cvref_t < Ti > , CharT > no cumple con los requisitos de BasicFormatter para cualquier Ti en Args .

Contenidos

Parámetros

fmt - un objeto que representa la cadena de formato. La cadena de formato consiste en
  • caracteres ordinarios (excepto { y } ), que se copian sin cambios a la salida,
  • secuencias de escape { { y } } , que se reemplazan con { y } respectivamente en la salida, y
  • campos de reemplazo.

Cada campo de reemplazo tiene el siguiente formato:

{ arg-id (opcional) } (1)
{ arg-id (opcional) : format-spec } (2)
1) campo de reemplazo sin especificación de formato
2) campo de reemplazo con especificación de formato
arg-id - especifica el índice del argumento en args cuyo valor se utilizará para el formato; si se omite, los argumentos se utilizan en orden.

Los arg-id s en una cadena de formato deben estar todos presentes o todos omitidos. Mezclar indexación manual y automática es un error.

format-spec - la especificación de formato definida por la especialización de std::formatter para el argumento correspondiente. No puede comenzar con } .

(since C++23)
(since C++26)
  • Para otros tipos formateables, la especificación de formato está determinada por especializaciones formatter definidas por el usuario.
args... - argumentos a formatear
loc - std::locale utilizado para el formato específico de la configuración regional

Valor de retorno

El número total de caracteres en la cadena formateada.

Excepciones

Propaga cualquier excepción lanzada por formatter.

Ejemplo

#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';
}

Salida:

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

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
P2216R3 C++20 lanza std::format_error para cadena de formato inválida cadena de formato inválida resulta en error en tiempo de compilación
P2418R2 C++20 objetos que no son ni const-usables ni copiables
(como objetos tipo generador) no son formateables
permitir formatear estos objetos
P2508R1 C++20 no hay nombre visible para el usuario para esta facilidad el nombre basic_format_string está expuesto

Véase también

(C++20)
escribe una representación formateada de sus argumentos a través de un iterador de salida
(plantilla de función)
escribe una representación formateada de sus argumentos a través de un iterador de salida, sin exceder un tamaño especificado
(plantilla de función)