Formatting library (since C++20)
Die Textformatierungsbibliothek bietet eine sichere und erweiterbare Alternative zu den printf-Funktionen. Sie soll die bestehende C++ I/O-Streams-Bibliothek ergänzen.
Inhaltsverzeichnis |
Formatspezifikationen
Die Formatspezifikation legt fest, wie Objekte mit verschiedenen Arten von Optionen formatiert werden.
Die Formatierung von Objekten grundlegender Typen und Standard-String-Typen verwendet die grundlegende Formatspezifikation . Andere Bibliothekskomponenten können ebenfalls ihre eigenen Formatspezifikationen bereitstellen, siehe hier für Details.
Formatierungsfunktionen
|
Definiert im Header
<format>
|
|
|
(C++20)
|
speichert die formatierte Darstellung der Argumente in einem neuen String
(Funktions-Template) |
|
(C++20)
|
gibt die formatierte Darstellung seiner Argumente über einen Output-Iterator aus
(Funktions-Template) |
|
(C++20)
|
gibt die formatierte Darstellung seiner Argumente über einen Output-Iterator aus, ohne eine bestimmte Größe zu überschreiten
(Funktions-Template) |
|
(C++20)
|
bestimmt die Anzahl der Zeichen, die notwendig sind, um die formatierte Darstellung seiner Argumente zu speichern
(Funktions-Template) |
Formatzeichenfolgen
|
Definiert im Header
<format>
|
|
|
(C++20)
(C++20)
(C++20)
|
Klassentemplate, das zur Konstruktionszeit Überprüfungen von Formatstrings zur Compile-Zeit durchführt
(Klassen-Template) |
|
(C++26)
|
erzeugt Laufzeit-Formatstrings, die direkt in benutzerorientierten Formatierungsfunktionen verwendbar sind
(Funktion) |
Formatierungskonzepte
|
Definiert in Header
<format>
|
|
|
(C++23)
|
Spezifiziert, dass ein Typ formatierbar ist, d.h. er spezialisiert
std::formatter
und stellt Memberfunktionen
parse
und
format
bereit
(Konzept) |
Erweiterbarkeitsunterstützung und Implementierungsdetails
|
Definiert im Header
<format>
|
|
|
(C++20)
|
Nicht-Template-Variante von
std::format
mit typeradierten Argumentdarstellungen
(Funktion) |
|
(C++20)
|
Nicht-Template-Variante von
std::format_to
mit typeradierten Argumentdarstellungen
(Funktionstemplate) |
|
(C++20)
(C++20)
|
erstellt ein typeradiertes Objekt, das alle Formatierungsargumente referenziert, konvertierbar zu
format_args
(Funktionstemplate) |
|
(C++20)
(veraltet in C++26)
|
Argumentschnittstelle für benutzerdefinierte Formatierer
(Funktionstemplate) |
|
(C++20)
|
definiert Formatierungsregeln für einen gegebenen Typ
(Klassentemplate) |
|
(C++23)
|
Klassentemplate, das bei der Implementierung von
std::formatter
Spezialisierungen für Bereichstypen hilft
(Klassentemplate) |
|
zeigt an, dass der Argumenttyp effizient ausgegeben werden kann
(Variable Template) |
|
|
(C++23)
|
spezifiziert, wie ein Bereich formatiert werden soll
(Enumeration) |
|
(C++23)
|
wählt ein geeignetes
std::range_format
für einen Bereich aus
(Variable Template) |
|
(C++20)
|
Klassentemplate, das Zugriff auf ein Formatierungsargument für benutzerdefinierte Formatierer bietet
(Klassentemplate) |
|
(C++20)
(C++20)
(C++20)
|
Klasse, die Zugriff auf alle Formatierungsargumente bietet
(Klassentemplate) |
|
(C++20)
(C++20)
(C++20)
|
Formatierungszustand, einschließlich aller Formatierungsargumente und des Ausgabeiterators
(Klassentemplate) |
|
(C++20)
(C++20)
(C++20)
|
Parserzustand für Formatierungszeichenketten
(Klassentemplate) |
|
(C++20)
|
Ausnahmetyp, der bei Formatierungsfehlern ausgelöst wird
(Klasse) |
Hilfselemente (since C++23)
|
template
<
class
R,
class
CharT
>
Konzept
/*const-formattable-range*/
=
|
(1) | ( Nur zur Darstellung* ) |
|
template
<
class
R,
class
CharT
>
using
/*fmt-maybe-const*/
=
|
(2) | ( Nur zur Darstellung* ) |
Hinweise
| Feature-Test Makro | Wert | Std | Feature | |
|---|---|---|---|---|
__cpp_lib_format
|
201907L
|
(C++20) | Textformatierung | |
202106L
|
(C++23)
(DR20) |
Kompilierzeit-Formatstring-Prüfungen;
Reduzierung der Parametrisierung von std::vformat_to |
||
202110L
|
(C++23)
(DR20) |
Korrektur der Locale-Behandlung in Chrono-Formatierern;
Unterstützung nicht-konstanter formatierbarer Typen |
||
202207L
|
(C++23)
(DR20) |
Verfügbarmachung von
std::basic_format_string
;
Klarstellung der Handhabung von Kodierungen in lokalisierter Formatierung von Chrono-Typen |
||
202304L
|
(C++26) | Formatierung von Zeigern | ||
202305L
|
(C++26) | Typüberprüfung von Format-Argumenten | ||
202306L
|
(C++26) |
Member-Funktion
std::basic_format_arg::visit
|
||
202311L
|
(C++26) | Laufzeit-Formatstring | ||
202403L
|
(C++26) | Ausgabe leerer Zeilen mit std::println | ||
202403L
|
(C++26)
(DR23) |
Ermöglichen einer effizienten Implementierung von
std::print
|
||
__cpp_lib_format_ranges
|
202207L
|
(C++23) | Formatierung von Ranges | |
__cpp_lib_format_path
|
202403L
|
(C++26) | Formatierung von std::filesystem::path | |
__cpp_lib_format_uchar
|
202311L
|
(C++26) | Korrektur der Formatierung von Code-Units als Ganzzahlen | |
__cpp_lib_formatters
|
202302L
|
(C++23) | Formatierung von std::thread::id und std::stacktrace |
Wir behandeln die Hinzufügung von
std::basic_format_string
(
P2508
) absichtlich als Defect Report, da alle bekannten Implementierungen diese Komponenten im C++20-Modus verfügbar machen, obwohl es offiziell nicht so kategorisiert ist.
Beispiel
#include <cassert> #include <format> int main() { std::string message = std::format("The answer is {}.", 42); assert(message == "The answer is 42."); }
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 |
|---|---|---|---|
| P2418R2 | C++20 |
Objekte, die weder const-formattierbar noch kopierbar sind
(wie generator-ähnliche Objekte) sind nicht formattierbar |
Formatierung dieser Objekte erlauben
(gelockerte Formatter-Anforderungen) |
| P2508R1 | C++20 | es gibt keinen benutzersichtigen Namen für diese Einrichtung |
der Name
basic_format_string
wird verfügbar gemacht
|
Siehe auch
|
(C++23)
|
gibt mit
formatierter
Darstellung der Argumente auf
stdout
oder einen Dateistrom aus
(Funktions-Template) |
|
(C++23)
|
wie
std::print
, jedoch wird jede Ausgabe durch zusätzlichen Zeilenumbruch beendet
(Funktions-Template) |
|
(C++23)
|
gibt
formatierte
Darstellung der Argumente aus
(Funktions-Template) |