std:: print
|
Definido en el encabezado
<print>
|
||
|
template
<
class
...
Args
>
void print ( std:: format_string < Args... > fmt, Args && ... args ) ; |
(1) | (desde C++23) |
|
template
<
class
...
Args
>
void
print
(
std::
FILE
*
stream,
|
(2) | (desde C++23) |
Formatee args de acuerdo con la cadena de formato fmt , e imprima el resultado en un flujo de salida.
? std:: vprint_unicode ( stream, fmt. str , std:: make_format_args ( args... ) )
: std :: vprint_unicode_buffered ( stream, fmt. str , std:: make_format_args ( args... ) ) ; .
? std:: vprint_nonunicode ( stream, fmt. str , std:: make_format_args ( args... ) )
: std :: vprint_nonunicode_buffered ( stream, fmt. str , std:: make_format_args ( args... ) ) ; .
Si
std::
formatter
<
Ti,
char
>
no cumple con los requisitos de
BasicFormatter
para cualquier
Ti
en
Args
(como lo requiere
std::make_format_args
), el comportamiento es indefinido.
Contenidos |
Parámetros
| stream | - | flujo de archivo de salida donde escribir | ||||||||||||||||||||||||||||||||||||||||||||||
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||
Excepciones
- std::bad_alloc en caso de fallo de asignación.
- std::system_error , si falla la escritura en el flujo.
- Propaga cualquier excepción lanzada por los formatters utilizados, por ejemplo std::format_error .
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_print
|
202207L
|
(C++23) | Salida formateada |
202403L
|
(C++26)
(DR23) |
Salida formateada sin búfer | |
202406L
|
(C++26)
(DR23) |
Habilitar salida formateada sin búfer para más tipos formateables | |
__cpp_lib_format
|
202207L
|
(C++23) | Exponer std::basic_format_string |
Ejemplo
#include <cstdio> #include <filesystem> #include <print> int main() { std::print("{2} {1}{0}!\n", 23, "C++", "Hello"); // overload (1) const auto tmp{std::filesystem::temp_directory_path() / "test.txt"}; if (std::FILE* stream{std::fopen(tmp.c_str(), "w")}) { std::print(stream, "File: {}", tmp.string()); // overload (2) std::fclose(stream); } }
Salida:
Hello C++23!
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 |
|---|---|---|---|
| P3107R5 | C++23 | solo se pueden realizar operaciones de impresión con búfer | se pueden realizar operaciones de impresión sin búfer |
| P3235R3 | C++23 |
los nombres de las funciones añadidas
por P3107R5 eran engañosos |
se cambiaron los nombres de las funciones |
Véase tambié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 una representación
formateada
de los argumentos
(plantilla de función) |
|
(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++11)
|
imprime salida formateada a
stdout
, un flujo de archivo o un búfer
(función) |