Namespaces
Variants

std:: print (std::ostream)

From cppreference.net
Definido en el encabezado <ostream>
template < class ... Args >
void print ( std:: ostream & os, std:: format_string < Args... > fmt, Args && ... args ) ;
(desde C++23)

Formatea args de acuerdo con la cadena de formato fmt , e inserta el resultado en el flujo os .

Si la codificación literal ordinaria es UTF-8, equivalente a:

El comportamiento no está definido si std:: formatter < Ti, char > no cumple con los requisitos de BasicFormatter para cualquier Ti en Args (según lo requerido por std:: make_format_args ).

Contenidos

Parámetros

os - flujo de salida donde insertar los datos
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 usará para el formato; si se omite, los argumentos se usan 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 } .

(desde C++23)
(desde C++26)
  • Para otros tipos formateables, la especificación de formato está determinada por especializaciones de formatter definidas por el usuario.
args... - argumentos a formatear

Excepciones

Notas

Macro de prueba de características Valor Estándar Característica
__cpp_lib_print 202207L (C++23) Salida formateada
__cpp_lib_format 202207L (C++23) Exponer std::basic_format_string

Ejemplo

#include <array>
#include <cctype>
#include <cstdio>
#include <format>
#include <numbers>
#include <ranges>
#include <sstream>
int main()
{
    std::array<char, 24> buf;
    std::format_to(buf.begin(), "{:.15f}", std::numbers::sqrt2);
    unsigned num{}, sum{};
    for (auto n : buf
                | std::views::filter(isdigit)
                | std::views::transform([](char x) { return x - '0'; })
                | std::views::take_while([&sum](char) { return sum < 42; }))
        sum += n, ++num;
    std::stringstream stream;
#ifdef __cpp_lib_print
    std::print(stream,
#else
    stream << std::format(
#endif
        "√2 \N{ALMOST EQUAL TO} {0}.\n"
        "The sum of its first {1} digits is {2}.",
        std::numbers::sqrt2, num, sum
    );
    std::puts(stream.str().data());
}

Salida:

√2 ≈ 1.4142135623730951.
The sum of its first 13 digits is 42.

Véase también

envía representación formateada de los argumentos con ' \n ' añadido
(plantilla de función)
(C++23)
imprime en stdout o un flujo de archivo usando representación formateada de los argumentos
(plantilla de función)
(C++20)
almacena representación formateada de los argumentos en una nueva cadena
(plantilla de función)