Namespaces
Variants

Formatting library (since C++20)

From cppreference.net

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)
gibt die formatierte Darstellung seiner Argumente über einen Output-Iterator aus, ohne eine bestimmte Größe zu überschreiten
(Funktions-Template)
bestimmt die Anzahl der Zeichen, die notwendig sind, um die formatierte Darstellung seiner Argumente zu speichern
(Funktions-Template)

Formatzeichenfolgen

Definiert im Header <format>
Klassentemplate, das zur Konstruktionszeit Überprüfungen von Formatstrings zur Compile-Zeit durchführt
(Klassen-Template)
erzeugt Laufzeit-Formatstrings, die direkt in benutzerorientierten Formatierungsfunktionen verwendbar sind
(Funktion)

Formatierungskonzepte

Definiert in Header <format>
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)
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)
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)
spezifiziert, wie ein Bereich formatiert werden soll
(Enumeration)
wählt ein geeignetes std::range_format für einen Bereich aus
(Variable Template)
Klassentemplate, das Zugriff auf ein Formatierungsargument für benutzerdefinierte Formatierer bietet
(Klassentemplate)
Klasse, die Zugriff auf alle Formatierungsargumente bietet
(Klassentemplate)
Formatierungszustand, einschließlich aller Formatierungsargumente und des Ausgabeiterators
(Klassentemplate)
Parserzustand für Formatierungszeichenketten
(Klassentemplate)
Ausnahmetyp, der bei Formatierungsfehlern ausgelöst wird
(Klasse)

Hilfselemente (since C++23)

template < class R, class CharT >

Konzept /*const-formattable-range*/ =
ranges:: input_range < const R > &&

std:: formattable < ranges:: range_reference_t < const R > , CharT > ;
(1) ( Nur zur Darstellung* )
template < class R, class CharT >

using /*fmt-maybe-const*/ =

std:: conditional_t < /*const-formattable-range*/ < R, CharT > , const R, R > ;
(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)
gibt formatierte Darstellung der Argumente aus
(Funktions-Template)