Namensräume
Varianten
Aktionen

std::formatted_size

Von cppreference.com
< cpp‎ | utility‎ | format
 
 
 
 
Definiert in 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)

Ermittelt die Gesamtzahl der Zeichen im formatierten String, indem args gemäß dem Formatstring fmt formatiert werden. Falls vorhanden, wird loc für sprachspezifische Formatierung verwendet.

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

Inhalt

[bearbeiten] Parameter

fmt - ein Objekt, das den Formatstring repräsentiert. Der Formatstring besteht aus
  • regulären Zeichen (außer { und }), die unverändert in die Ausgabe kopiert werden,
  • Escape-Sequenzen {{ und }}, die in der Ausgabe durch { und } ersetzt werden, und
  • Ersetzungsfeldern.

Jedes Ersetzungsfeld hat das folgende 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 zur Formatierung verwendet werden soll; wenn er weggelassen wird, werden die Argumente in der Reihenfolge verwendet.

Die `arg-id`s in einem Formatstring müssen entweder alle vorhanden sein oder alle weggelassen werden. Das Mischen von manueller und automatischer Indizierung ist ein Fehler.

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

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

[bearbeiten] Rückgabewert

Die Gesamtzahl der Zeichen im formatierten String.

[bearbeiten] Ausnahmen

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

[bearbeiten] 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."

[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
P2216R3 C++20 wirft std::format_error für ungültige Formatzeichenkette. ungültige Formatzeichenkette führt zu einem Kompilierungsfehler.
P2418R2 C++20 Objekte, die weder const-benutzbar noch kopierbar sind.
(wie Generator-ähnliche Objekte) sind nicht formatierbar
Ermöglichen der Formatierung dieser Objekte
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++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]