Formatting library (since C++20)
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) |
|
(C++20)
|
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) |
|
(C++20)
|
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>
|
|
|
(C++20)
(C++20)
(C++20)
|
plantilla de clase que realiza comprobaciones de cadenas de formato en tiempo de compilación durante la construcción
(plantilla de clase) |
|
(C++26)
|
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>
|
|
|
(C++23)
|
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) |
|
(C++20)
(C++20)
|
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) |
|
(C++23)
|
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) |
|
|
(C++23)
|
especifica cómo debe formatearse un rango
(enumeración) |
|
(C++23)
|
selecciona un
std::range_format
adecuado para un rango
(plantilla de variable) |
|
(C++20)
|
plantilla de clase que proporciona acceso a un argumento de formato para formateadores definidos por el usuario
(plantilla de clase) |
|
(C++20)
(C++20)
(C++20)
|
clase que proporciona acceso a todos los argumentos de formato
(plantilla de clase) |
|
(C++20)
(C++20)
(C++20)
|
estado de formato, incluyendo todos los argumentos de formato y el iterador de salida
(plantilla de clase) |
|
(C++20)
(C++20)
(C++20)
|
estado del analizador de cadenas de formato
(plantilla de clase) |
|
(C++20)
|
tipo de excepción lanzada en errores de formato
(clase) |
Elementos auxiliares (desde C++23)
|
template
<
class
R,
class
CharT
>
concepto
/*const-formattable-range*/
=
|
(1) | ( solo para exposición* ) |
|
template
<
class
R,
class
CharT
>
using
/*fmt-maybe-const*/
=
|
(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) |
|
(C++23)
|
genera
formato
de representación de los argumentos
(plantilla de función) |