Namensräume
Varianten
Aktionen

Formatierungsbibliothek (seit C++20)

Von cppreference.com
< cpp‎ | utility
 
 
 
 

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) [bearbeiten]
(C++20)
schreibt die formatierte Darstellung ihrer Argumente über einen Output-Iterator
(Funktionstemplate) [bearbeiten]
schreibt die formatierte Darstellung ihrer Argumente über einen Output-Iterator, überschreitet nicht die angegebene Größe
(Funktionstemplate) [bearbeiten]
bestimmt die Anzahl der Zeichen, die zur Speicherung der formatierten Darstellung ihrer Argumente erforderlich sind
(Funktionstemplate) [bearbeiten]

[bearbeiten] Format-Strings

Definiert in Header <format>
Klassentemplate, das zur Konstruktionszeit Format-String-Prüfungen zur Kompilierzeit durchführt
(Klassentemplate) [bearbeiten]
erstellt Laufzeit-Format-Strings, die direkt in benutzerorientierten Formatierungsfunktionen verwendet werden können
(Funktion) [bearbeiten]

[bearbeiten] Formatierungs-Konzepte

Definiert in Header <format>
spezifiziert, dass ein Typ formatierbar ist, d.h., er spezialisiert std::formatter und stellt die Memberfunktionen parse und format bereit
(Konzept) [bearbeiten]

[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) [bearbeiten]
nicht-Template-Variante von std::format_to mit typ-erased Argumentdarstellung
(Funktionstemplate) [bearbeiten]
erstellt ein typ-erased Objekt, das auf alle Formatierungsargumente verweist und in format_args konvertierbar ist
(Funktionstemplate) [bearbeiten]
(C++20) (veraltet in C++26)
Argument-Visitationsschnittstelle für benutzerdefinierte Formatierer
(Funktionstemplate) [bearbeiten]
(C++20)
definiert Formatierungsregeln für einen gegebenen Typ
(Klassentemplate) [bearbeiten]
Klassentemplate, das bei der Implementierung von std::formatter-Spezialisierungen für Range-Typen hilft
(Klassentemplate) [bearbeiten]
zeigt an, dass der Argumenttyp effizient ausgegeben werden kann
(Variablentemplate)[bearbeiten]
spezifiziert, wie ein Range formatiert werden soll
(Enum) [bearbeiten]
wählt eine passende std::range_format für einen Range aus
(Variablentemplate)[bearbeiten]
Klassentemplate, das den Zugriff auf ein Formatierungsargument für benutzerdefinierte Formatierer ermöglicht
(Klassentemplate) [bearbeiten]
Klasse, die Zugriff auf alle Formatierungsargumente ermöglicht
(Klassentemplate) [bearbeiten]
Formatierungsstatus, einschließlich aller Formatierungsargumente und des Output-Iterators
(Klassentemplate) [bearbeiten]
Formatierungs-String-Parser-Status
(Klassentemplate) [bearbeiten]
Ausnahmetyp, der bei Formatierungsfehlern geworfen wird
(Klasse) [bearbeiten]

[bearbeiten] Hilfselemente (seit C++23)

template< class R, class CharT >

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

    std::formattable<ranges::range_reference_t<const R>, CharT>;
(1) (nur Exposition*)
template< class R, class CharT >

using /*fmt-maybe-const*/ =

    std::conditional_t</*const-formattable-range*/<R, CharT>, const R, R>;
(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) [bearbeiten]
(C++23)
dasselbe wie std::print, außer dass jeder Druck durch eine zusätzliche neue Zeile beendet wird
(Funktionstemplate) [bearbeiten]
gibt die formatierte Darstellung der Argumente aus
(Funktionstemplate) [bearbeiten]