std::print
Von cppreference.com
| Definiert in 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, |
(2) | (seit C++23) |
Formatiert args gemäß dem Formatstring fmt und druckt das Ergebnis in einen Ausgabestream.
1) Entspricht std::print(stdout, fmt, std::forward<Args>(args)...).
2) Wenn die gewöhnliche Literalcodierung UTF-8 ist, entspricht dies (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...));.
? std::vprint_unicode(stream, fmt.str, std::make_format_args(args...))
: std::vprint_unicode_buffered(stream, fmt.str, std::make_format_args(args...));.
Andernfalls entspricht dies (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...));.
? 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 ein beliebiges `Ti` in `Args` (wie von std::make_format_args gefordert) nicht erfüllt, ist das Verhalten undefiniert.
Inhalt |
[edit] Parameter
| stream | - | Ausgabestream, in den geschrieben werden soll | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
Jedes Ersetzungsfeld hat das folgende Format:
1) Ersetzungsfeld ohne Formatangabe
2) Ersetzungsfeld mit Formatangabe
| ||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | zu formatierende Argumente | ||||||||||||||||||||||||||||||||||||||||||||||
[edit] Ausnahmen
- std::bad_alloc bei Zuweisungsfehler.
- std::system_error, wenn das Schreiben in den Stream fehlschlägt.
- Propagiert jede Ausnahme, die von verwendeten Formatierern ausgelöst wird, z. B. std::format_error.
[edit] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__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 mehr formatierbare Typen | |
__cpp_lib_format |
202207L |
(C++23) | Freigabe von std::basic_format_string |
[edit] Beispiel
Führen Sie diesen Code aus
#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); } }
Ausgabe
Hello C++23!
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| P3107R5 | C++23 | nur gepufferte Druckoperationen können durchgeführt werden | kann ungepufferte Druckoperationen durchführen |
| P3235R3 | C++23 | die Namen der hinzugefügten Funktionen von P3107R5 waren irreführend |
die Funktionsnamen geändert wurden |
[edit] Siehe auch
| (C++23) |
dasselbe wie std::print, außer dass jeder Druck durch eine zusätzliche neue Zeile beendet wird (Funktionstemplate) |
| (C++23) |
gibt die formatierten Darstellung der Argumente aus (Funktionstemplate) |
| (C++20) |
speichert die formatierte Darstellung der Argumente in einem neuen String (Funktionstemplate) |
| (C++20) |
schreibt die formatierte Darstellung ihrer Argumente über einen Output-Iterator (Funktionstemplate) |
| (C++11) |
druckt formatierte Ausgabe nach stdout, einen Dateistream oder einen Puffer (Funktion) |