std::formatted_size
| 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, |
(3) | (seit C++20) |
| template< class... Args > std::size_t formatted_size( const std::locale& loc, |
(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
Jedes Ersetzungsfeld hat das folgende Format:
1) Ersetzungsfeld ohne Formatangabe
2) Ersetzungsfeld mit Formatangabe
| ||||||||||||||||||||||||||||||||||||||||||||||
| 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) |
| (C++20) |
schreibt die formatierte Darstellung ihrer Argumente über einen Output-Iterator, überschreitet nicht die angegebene Größe (Funktionstemplate) |