Namespaces
Variants

Formatting library (since C++20)

From cppreference.net

La biblioteca de formato de texto ofrece una alternativa segura y extensible a la familia de funciones printf. Está diseñada para complementar la biblioteca existente de flujos de E/S de C++.

Contenidos

Especificaciones de formato

La especificación de formato especifica cómo se formatean los objetos con diferentes tipos de opciones.

El formato de objetos de tipos básicos y tipos de cadena estándar utiliza la especificación de formato básico . Otros componentes de la biblioteca también pueden proporcionar sus propias especificaciones de formato, consulte aquí para más detalles.

Funciones de formato

Definido en el encabezado <format>
(C++20)
almacena la representación formateada de los argumentos en una nueva cadena
(plantilla de función)
(C++20)
escribe la representación formateada de sus argumentos a través de un iterador de salida
(plantilla de función)
escribe la representación formateada de sus argumentos a través de un iterador de salida, sin exceder el tamaño especificado
(plantilla de función)
determina el número de caracteres necesarios para almacenar la representación formateada de sus argumentos
(plantilla de función)

Cadenas de formato

Definido en el encabezado <format>
plantilla de clase que realiza comprobaciones de cadenas de formato en tiempo de compilación durante la construcción
(plantilla de clase)
crea cadenas de formato en tiempo de ejecución directamente utilizables en funciones de formato orientadas al usuario
(función)

Conceptos de formato

Definido en el encabezado <format>
especifica que un tipo es formateable, es decir, especializa std::formatter y proporciona las funciones miembro parse y format
(concept)

Soporte de extensibilidad y detalle de implementación

Definido en el encabezado <format>
(C++20)
variante no plantilla de std::format que utiliza representación de argumentos con borrado de tipo
(función)
(C++20)
variante no plantilla de std::format_to que utiliza representación de argumentos con borrado de tipo
(plantilla de función)
crea un objeto con borrado de tipo que referencia todos los argumentos de formato, convertible a format_args
(plantilla de función)
(C++20) (obsoleto en C++26)
interfaz de visita de argumentos para formateadores definidos por el usuario
(plantilla de función)
(C++20)
define reglas de formato para un tipo dado
(plantilla de clase)
plantilla de clase que ayuda a implementar especializaciones de std::formatter para tipos de rango
(plantilla de clase)
indica que el tipo de argumento puede imprimirse eficientemente
(plantilla de variable)
especifica cómo debe formatearse un rango
(enumeración)
selecciona un std::range_format adecuado para un rango
(plantilla de variable)
plantilla de clase que proporciona acceso a un argumento de formato para formateadores definidos por el usuario
(plantilla de clase)
clase que proporciona acceso a todos los argumentos de formato
(plantilla de clase)
estado de formato, incluyendo todos los argumentos de formato y el iterador de salida
(plantilla de clase)
estado del analizador de cadenas de formato
(plantilla de clase)
tipo de excepción lanzada en errores de formato
(clase)

Elementos auxiliares (desde C++23)

template < class R, class CharT >

concepto /*const-formattable-range*/ =
ranges:: input_range < const R > &&

std:: formattable < ranges:: range_reference_t < const R > , CharT > ;
(1) ( solo para exposición* )
template < class R, class CharT >

using /*fmt-maybe-const*/ =

std:: conditional_t < /*const-formattable-range*/ < R, CharT > , const R, R > ;
(2) ( solo para exposición* )

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_format 201907L (C++20) Formateo de texto
202106L (C++23)
(DR20)
Comprobaciones de cadenas de formato en tiempo de compilación;
Reducción de parametrización de std::vformat_to
202110L (C++23)
(DR20)
Corrección del manejo de configuraciones regionales en formateadores de chrono;
Soporte para tipos no constantes formateables
202207L (C++23)
(DR20)
Exposición de std::basic_format_string ;
Aclaración del manejo de codificaciones en el formateo localizado de tipos chrono
202304L (C++26) Formateo de punteros
202305L (C++26) Comprobación de tipos de argumentos de formato
202306L (C++26) Miembro std::basic_format_arg::visit
202311L (C++26) Cadena de formato en tiempo de ejecución
202403L (C++26) Impresión de líneas en blanco con std::println
202403L (C++26)
(DR23)
Permitir una implementación eficiente de std::print
__cpp_lib_format_ranges 202207L (C++23) Formateo de rangos
__cpp_lib_format_path 202403L (C++26) Formateo de std::filesystem::path
__cpp_lib_format_uchar 202311L (C++26) Corrección del formateo de unidades de código como enteros
__cpp_lib_formatters 202302L (C++23) Formateo de std::thread::id y std::stacktrace

Intencionalmente tratamos la adición de std::basic_format_string ( P2508 ) como un informe de defectos porque todas las implementaciones conocidas hacen que estos componentes estén disponibles en modo C++20, aunque no esté categorizado oficialmente como tal.

Ejemplo

#include <cassert>
#include <format>
int main()
{
    std::string message = std::format("The answer is {}.", 42);
    assert(message == "The answer is 42.");
}

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
P2418R2 C++20 los objetos que no son ni formateables-const ni copiables
(como objetos tipo generador) no son formateables
permitir formatear estos objetos
(requisitos de formateador relajados)
P2508R1 C++20 no hay un nombre visible para el usuario para esta facilidad el nombre basic_format_string está expuesto

Véase también

(C++23)
imprime en stdout o un flujo de archivo usando formato de representación de los argumentos
(plantilla de función)
(C++23)
igual que std::print excepto que cada impresión termina con una nueva línea adicional
(plantilla de función)
genera formato de representación de los argumentos
(plantilla de función)