Namespaces
Variants

std:: print

From cppreference.net
< cpp ‎ | io
Definiert im Header <print>
template < class ... Args >
void print ( std:: format_string < Args... > fmt, Args && ... args ) ;
(1) (seit C++23)
template < class ... Args >

void print ( std:: FILE * stream,

std:: format_string < Args... > fmt, Args && ... args ) ;
(2) (seit C++23)

Formatiere args gemäß der Formatzeichenkette fmt und gib das Ergebnis an einen Ausgabestrom aus.

1) Entspricht std :: print ( stdout , fmt, std:: forward < Args > ( args ) ... ) .
2) Wenn die gewöhnliche Literalkodierung UTF-8 ist, äquivalent zu ( std :: enable_nonlocking_formatter_optimization < std:: remove_cvref_t < Args >> && ... )
? std:: vprint_unicode ( stream, fmt. str , std:: make_format_args ( args... ) )
: std :: vprint_unicode_buffered ( stream, fmt. str , std:: make_format_args ( args... ) ) ;
.
Andernfalls äquivalent zu ( std :: enable_nonlocking_formatter_optimization < std:: remove_cvref_t < Args >> && ... )
? std:: vprint_nonunicode ( stream, fmt. str , std:: make_format_args ( args... ) )
: std :: vprint_nonunicode_buffered ( stream, fmt. str , std:: make_format_args ( args... ) ) ;
.

Wenn std:: formatter < Ti, char > die BasicFormatter -Anforderungen für irgendein Ti in Args nicht erfüllt (wie von std::make_format_args benötigt), ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

stream - Ausgabedateistream, in den geschrieben wird
fmt - ein Objekt, das die Formatzeichenkette repräsentiert. Die Formatzeichenkette besteht aus
  • gewöhnlichen Zeichen (außer { und } ), die unverändert in die Ausgabe kopiert werden,
  • Escape-Sequenzen { { und } } , die in der Ausgabe durch { bzw. } ersetzt werden, und
  • Ersetzungsfeldern.

Jedes Ersetzungsfeld hat folgendes Format:

{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
1) Ersetzungsfeld ohne Formatangabe
2) Ersetzungsfeld mit Formatangabe
arg-id - gibt den Index des Arguments in args an, dessen Wert für die Formatierung verwendet wird; falls ausgelassen, werden die Argumente in Reihenfolge verwendet.

Die arg-id s in einer Formatzeichenkette müssen entweder alle vorhanden oder alle ausgelassen sein. Das Vermischen von manueller und automatischer Indizierung ist ein Fehler.

format-spec - die Formatangabe, definiert durch die std::formatter -Spezialisierung für das entsprechende Argument. Darf nicht mit } beginnen.

(since C++23)
(since C++26)
  • Für andere formatierbare Typen wird die Formatangabe durch benutzerdefinierte formatter -Spezialisierungen bestimmt.
args... - zu formatierende Argumente

Exceptions

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_print 202207L (C++23) Formatierte Ausgabe
202403L (C++26)
(DR23)
Ungepufferte formatierte Ausgabe
202406L (C++26)
(DR23)
Aktivierung ungepufferter formatierter Ausgabe für weitere formatierbare Typen
__cpp_lib_format 202207L (C++23) Verfügbarmachen von std::basic_format_string

Beispiel

#include <cstdio>
#include <filesystem>
#include <print>
int main()
{
    std::print("{2} {1}{0}!\n", 23, "C++", "Hello");  // Überladung (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()); // Überladung (2)
        std::fclose(stream);
    }
}

Ausgabe:

Hello C++23!

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
P3107R5 C++23 nur gepufferte Druckoperationen können durchgeführt werden kann ungepufferte Druckoperationen durchführen
P3235R3 C++23 die Namen der durch P3107R5 hinzugefügten Funktionen waren irreführend die Funktionsnamen wurden geändert

Siehe auch

(C++23)
identisch mit std::print , außer dass jeder Ausdruck durch eine zusätzliche neue Zeile abgeschlossen wird
(Funktionsschablone)
gibt eine formatierte Darstellung der Argumente aus
(Funktionsschablone)
(C++20)
speichert die formatierte Darstellung der Argumente in einer neuen Zeichenkette
(Funktionsschablone)
(C++20)
schreibt die formatierte Darstellung der Argumente über einen Ausgabeiterator
(Funktionsschablone)
gibt formatierte Ausgabe an stdout , einen Dateistrom oder einen Puffer aus
(Funktion)