std:: format
|
Definido en el encabezado
<format>
|
||
|
template
<
class
...
Args
>
std:: string format ( std:: format_string < Args... > fmt, Args && ... args ) ; |
(1) | (desde C++20) |
|
template
<
class
...
Args
>
std:: wstring format ( std:: wformat_string < Args... > fmt, Args && ... args ) ; |
(2) | (desde C++20) |
|
template
<
class
...
Args
>
std::
string
format
(
const
std::
locale
&
loc,
|
(3) | (desde C++20) |
|
template
<
class
...
Args
>
std::
wstring
format
(
const
std::
locale
&
loc,
|
(4) | (desde C++20) |
Formatea args de acuerdo con la cadena de formato fmt , y devuelve el resultado como una cadena. Si está presente, loc se utiliza para el formato específico de la configuración regional.
La cadena de formato
fmt
se verifica en tiempo de compilación
a menos que se inicialice a partir del resultado de
std::runtime_format
(desde C++26)
. Si, en tiempo de compilación, se encuentra que la cadena de formato es inválida para los tipos de los argumentos a formatear, se emitirá un error de compilación.
Los siguientes requisitos se aplican a cada tipo
T
en
Args
, donde
CharT
es
char
para las sobrecargas
(1,3)
,
wchar_t
para las sobrecargas
(2,4)
:
- std:: formatter < T, CharT > debe satisfacer BasicFormatter
- std:: formatter < T, CharT > :: parse ( ) debe ser constexpr para el propósito de verificación de cadenas de formato en tiempo de compilación.
Contenidos |
Parámetros
| fmt | - |
Cada campo de reemplazo tiene el siguiente formato:
1)
campo de reemplazo sin especificación de formato
2)
campo de reemplazo con especificación de formato
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | argumentos a formatear | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale utilizado para el formato específico de la configuración regional | ||||||||||||||||||||||||||||||||||||||||||||||
Valor de retorno
Un objeto string que contiene el resultado formateado.
Excepciones
Lanza std::bad_alloc en caso de fallo de asignación de memoria. También propaga excepciones lanzadas por cualquier formateador.
Notas
No es un error proporcionar más argumentos de los que requiere la cadena de formato:
std::format("{} {}!", "Hello", "world", "something"); // OK, produce "Hello world!"
Es un error si la cadena de formato no es una expresión constante
a menos que se inicialice a partir del resultado de
std::runtime_format
(desde C++26)
.
std::vformat
no tiene este requisito.
std::string f1(std::string_view runtime_format_string) { // return std::format(runtime_format_string, "x", 42); // error 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) }
Ejemplo
#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 += "{} "; // construye la cadena de formato std::cout << fmt << " : "; std::cout << dyna_print(fmt, "alpha", 'Z', 3.14, "unused"); std::cout << '\n'; } }
Salida posible:
Hello {"Africa", "America", "Antarctica", "Asia", "Australia", "Europe"}!
{} : alpha
{} {} : alpha Z
{} {} {} : alpha Z 3.14
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) |
|
(C++20)
|
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) |