Formatierungsbibliothek (seit C++20)
Die Textformatierungsbibliothek bietet eine sichere und erweiterbare Alternative zur printf-Funktionsfamilie. Sie soll die bestehende C++ I/O-Stream-Bibliothek ergänzen.
Inhalt |
[bearbeiten] Format-Spezifikationen
Format-Spezifikationen legen fest, wie Objekte mit verschiedenen Arten von Optionen formatiert werden.
Die Formatierung von Objekten grundlegender Typen und standardmäßiger String-Typen verwendet die grundlegende Format-Spezifikation. Andere Bibliothekskomponenten können auch ihre eigenen Format-Spezifikationen bereitstellen, siehe hier für Details.
[bearbeiten] Formatierungsfunktionen
| Definiert in Header
<format> | |
| (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++20) |
schreibt die formatierte Darstellung ihrer Argumente über einen Output-Iterator, überschreitet nicht die angegebene Größe (Funktionstemplate) |
| (C++20) |
bestimmt die Anzahl der Zeichen, die zur Speicherung der formatierten Darstellung ihrer Argumente erforderlich sind (Funktionstemplate) |
[bearbeiten] Format-Strings
| Definiert in Header
<format> | |
| (C++20)(C++20)(C++20) |
Klassentemplate, das zur Konstruktionszeit Format-String-Prüfungen zur Kompilierzeit durchführt (Klassentemplate) |
| (C++26) |
erstellt Laufzeit-Format-Strings, die direkt in benutzerorientierten Formatierungsfunktionen verwendet werden können (Funktion) |
[bearbeiten] Formatierungs-Konzepte
| Definiert in Header
<format> | |
| (C++23) |
spezifiziert, dass ein Typ formatierbar ist, d.h., er spezialisiert std::formatter und stellt die Memberfunktionen parse und format bereit(Konzept) |
[bearbeiten] Unterstützung für Erweiterbarkeit und Implementierungsdetails
| Definiert in Header
<format> | |
| (C++20) |
nicht-Template-Variante von std::format mit typ-erased Argumentdarstellung (Funktion) |
| (C++20) |
nicht-Template-Variante von std::format_to mit typ-erased Argumentdarstellung (Funktionstemplate) |
| (C++20)(C++20) |
erstellt ein typ-erased Objekt, das auf alle Formatierungsargumente verweist und in format_args konvertierbar ist(Funktionstemplate) |
| (C++20) (veraltet in C++26) |
Argument-Visitationsschnittstelle 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 Range-Typen hilft (Klassentemplate) |
| zeigt an, dass der Argumenttyp effizient ausgegeben werden kann (Variablentemplate) | |
| (C++23) |
spezifiziert, wie ein Range formatiert werden soll (Enum) |
| (C++23) |
wählt eine passende std::range_format für einen Range aus (Variablentemplate) |
| (C++20) |
Klassentemplate, das den Zugriff auf ein Formatierungsargument für benutzerdefinierte Formatierer ermöglicht (Klassentemplate) |
| (C++20)(C++20)(C++20) |
Klasse, die Zugriff auf alle Formatierungsargumente ermöglicht (Klassentemplate) |
| (C++20)(C++20)(C++20) |
Formatierungsstatus, einschließlich aller Formatierungsargumente und des Output-Iterators (Klassentemplate) |
| (C++20)(C++20)(C++20) |
Formatierungs-String-Parser-Status (Klassentemplate) |
| (C++20) |
Ausnahmetyp, der bei Formatierungsfehlern geworfen wird (Klasse) |
[bearbeiten] Hilfselemente (seit C++23)
template< class R, class CharT > concept /*const-formattable-range*/ = |
(1) | (nur Exposition*) |
template< class R, class CharT > using /*fmt-maybe-const*/ = |
(2) | (nur Exposition*) |
[bearbeiten] Hinweise
| Feature-Test-Makro | Wert | Std | Feature | |
|---|---|---|---|---|
__cpp_lib_format |
201907L |
(C++20) | Textformatierung | |
202106L |
(C++23) (DR20) |
Format-String-Prüfung zur Kompilierzeit; Reduzierung der Parametrisierung von std::vformat_to | ||
202110L |
(C++23) (DR20) |
Behebung der Locale-Behandlung in Chrono-Formatierern; Unterstützung für nicht-const-formatierbare Typen | ||
202207L |
(C++23) (DR20) |
std::basic_format_string verfügbar machen; Klärung der Behandlung von Encodings bei lokalisierter Formatierung von Chrono-Typen | ||
202304L |
(C++26) | Formatierung von Zeigern | ||
202305L |
(C++26) | Typ-Prüfung von Format-Argumenten | ||
202306L |
(C++26) | Member std::basic_format_arg::visit | ||
202311L |
(C++26) | Laufzeit-Format-String | ||
202403L |
(C++26) | Drucken von Leerzeilen 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) | Korrigieren der Formatierung von Code-Einheiten 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 Fehlerbericht, da alle bekannten Implementierungen diese Komponenten im C++20-Modus verfügbar machen, obwohl sie offiziell nicht so kategorisiert sind.
[bearbeiten] Beispiel
#include <cassert> #include <format> int main() { std::string message = std::format("The answer is {}.", 42); assert(message == "The answer is 42."); }
[bearbeiten] 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 |
|---|---|---|---|
| P2418R2 | C++20 | Objekte, die weder const-formatierbar noch kopierbar sind (wie Generator-ähnliche Objekte) sind nicht formatierbar |
Ermöglichen der Formatierung dieser Objekte (gelockerte Formatter-Anforderungen) |
| P2508R1 | C++20 | Es gibt keinen benutzerseitig sichtbaren Namen für diese Einrichtung | Der Name basic_format_string wird verfügbar gemacht |
[bearbeiten] Siehe auch
| (C++23) |
druckt in stdout oder einen Dateistream unter Verwendung der formatierten Darstellung der Argumente (Funktionstemplate) |
| (C++23) |
dasselbe wie std::print, außer dass jeder Druck durch eine zusätzliche neue Zeile beendet wird (Funktionstemplate) |
| (C++23) |
gibt die formatierte Darstellung der Argumente aus (Funktionstemplate) |