Namespaces
Variants

std:: formatted_size

From cppreference.net
Definiert im Header <format>
template < class ... Args >
std:: size_t formatted_size ( std:: format_string < Args... > fmt, Args && ... args ) ;
(1) (seit C++20)
template < class ... Args >
std:: size_t formatted_size ( std:: wformat_string < Args... > fmt, Args && ... args ) ;
(2) (seit C++20)
template < class ... Args >

std:: size_t formatted_size ( const std:: locale & loc,

std:: format_string < Args... > fmt, Args && ... args ) ;
(3) (seit C++20)
template < class ... Args >

std:: size_t formatted_size ( const std:: locale & loc,

std:: wformat_string < Args... > fmt, Args && ... args ) ;
(4) (seit C++20)

Bestimmen Sie die Gesamtanzahl der Zeichen in der formatierten Zeichenkette, indem Sie args gemäß der Formatzeichenkette fmt formatieren. Falls vorhanden, wird loc für lokalisierungsspezifische Formatierung verwendet.

Das Verhalten ist undefiniert, falls std:: formatter < std:: remove_cvref_t < Ti > , CharT > die BasicFormatter -Anforderungen für irgendein Ti in Args nicht erfüllt.

Inhaltsverzeichnis

Parameter

fmt - ein Objekt, das die Formatzeichenkette repräsentiert. Die Formatzeichenkette besteht aus
  • gewöhnlichen Zeichen (außer { und } ), die unverändert in die Ausgabe kopiert werden,
  • Escape-Sequenzen { { und } } , die in der Ausgabe durch { bzw. } ersetzt werden, und
  • Ersetzungsfeldern.

Jedes Ersetzungsfeld hat folgendes Format:

{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
1) Ersetzungsfeld ohne Formatangabe
2) Ersetzungsfeld mit Formatangabe
arg-id - gibt den Index des Arguments in args an, dessen Wert für die Formatierung verwendet werden soll; falls ausgelassen, werden die Argumente in Reihenfolge verwendet.

Die arg-id s in einer Formatzeichenkette müssen entweder alle angegeben oder alle ausgelassen werden. Das Vermischen von manueller und automatischer Indizierung ist ein Fehler.

format-spec - die Formatangabe, definiert durch die std::formatter -Spezialisierung für das entsprechende Argument. Darf nicht mit } beginnen.

(since C++23)
(since C++26)
  • Für andere formatierbare Typen wird die Formatangabe durch benutzerdefinierte formatter -Spezialisierungen bestimmt.
args... - zu formatierende Argumente
loc - std::locale verwendet für lokalisierungsspezifische Formatierung

Rückgabewert

Die Gesamtzahl der Zeichen in der formatierten Zeichenkette.

Exceptions

Leitet jede Ausnahme weiter, die vom Formatter ausgelöst wird.

Beispiel

#include <format>
#include <iomanip>
#include <iostream>
#include <string_view>
#include <vector>
int main()
{
    using namespace std::literals::string_view_literals;
    constexpr auto fmt_str{"Hubble's H{0} {1} {2:*^4} miles/sec/mpc."sv};
    constexpr auto sub_zero{"\N{SUBSCRIPT ZERO}"sv}; // "₀" or {0342, 130, 128}
    constexpr auto aprox_equ{"\N{APPROXIMATELY EQUAL TO}"sv}; // "≅" or {0342, 137, 133}
    constexpr int Ho{42}; // H₀
    const auto min_buffer_size{std::formatted_size(fmt_str, sub_zero, aprox_equ, Ho)};
    std::cout << "Min buffer size = " << min_buffer_size << '\n';
    // Use std::vector as dynamic buffer. The buffer does not include the trailing '\0'.
    std::vector<char> buffer(min_buffer_size);
    std::format_to_n(buffer.data(), buffer.size(), fmt_str, sub_zero, aprox_equ, Ho);
    std::cout << "Buffer: "
              << std::quoted(std::string_view{buffer.data(), min_buffer_size})
              << '\n';
    // Print the buffer directly after adding the trailing '\0'.
    buffer.push_back('\0');
    std::cout << "Buffer: " << std::quoted(buffer.data()) << '\n';
}

Ausgabe:

Min buffer size = 37
Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."
Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."

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
P2216R3 C++20 wirft std::format_error für ungültige Formatzeichenfolge ungültige Formatzeichenfolge führt zu Compilezeitfehler
P2418R2 C++20 Objekte, die weder const-verwendbar noch kopierbar sind
(wie Generator-ähnliche Objekte) sind nicht formatierbar
Formatierung dieser Objekte erlauben
P2508R1 C++20 es gibt keinen für Benutzer sichtbaren Namen für diese Einrichtung der Name basic_format_string wird verfügbar gemacht

Siehe auch

(C++20)
Schreibt eine formatierte Darstellung seiner Argumente über einen Ausgabeiterator
(Funktions-Template)
Schreibt eine formatierte Darstellung seiner Argumente über einen Ausgabeiterator, ohne eine bestimmte Größe zu überschreiten
(Funktions-Template)