std:: format_to_n, std:: format_to_n_result
|
Definiert in Header
<format>
|
||
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(1) | (seit C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(2) | (seit C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(3) | (seit C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(4) | (seit C++20) |
|
Hilfstypen
|
||
|
template
<
class
OutputIt
>
struct
format_to_n_result
{
|
(5) | (seit C++20) |
Formatiere args gemäß der Formatzeichenkette fmt und schreibe das Ergebnis an den Ausgabeiterator out . Es werden maximal n Zeichen geschrieben. Falls vorhanden, wird loc für lokalisierungsabhängige Formatierung verwendet.
Lassen Sie
CharT
für Überladungen
(1,3)
char
sein und
wchar_t
für Überladungen
(2,4)
.
Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn
OutputIt
das Konzept
std::
output_iterator
<
const
CharT
&
>
erfüllt.
Das Verhalten ist undefiniert, wenn
OutputIt
nicht das Konzept
std::
output_iterator
<
const
CharT
&
>
erfüllt (die semantischen Anforderungen nicht erfüllt), oder wenn
std::
formatter
<
std::
remove_cvref_t
<
Ti
>
, CharT
>
die
BasicFormatter
Anforderungen für irgendein
Ti
in
Args
nicht erfüllt.
std::format_to_n_result
besitzt keine Basisklassen oder Member außer
out
,
size
und implizit deklarierten speziellen Memberfunktionen.
Inhaltsverzeichnis |
Parameter
| out | - | Iterator zum Ausgabepuffer | ||||||||||||||||||||||||||||||||||||||||||||||
| n | - | Maximale Anzahl der in den Puffer zu schreibenden Zeichen | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
Jedes Ersetzungsfeld hat folgendes Format:
1)
Ersetzungsfeld ohne Formatangabe
2)
Ersetzungsfeld mit Formatangabe
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | zu formatierende Argumente | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale für lokalisierungsspezifische Formatierung | ||||||||||||||||||||||||||||||||||||||||||||||
Rückgabewert
Ein
format_to_n_result
bei dem das
out
Mitglied ein Iterator hinter dem Ende des Ausgabebereichs ist und das
size
Mitglied die gesamte (nicht abgeschnittene) Ausgabegröße darstellt.
Ausnahmen
Leitet alle Ausnahmen weiter, die durch Formatierer- oder Iterator-Operationen ausgelöst werden.
Hinweise
Die libstdc++-Implementierung vor GCC-13.3 hatte einen Fehler bei der Meldung des korrekten format_to_n_result :: out -Werts.
Beispiel
Auf Godbolt's Compiler Explorer: clang (trunk) + libc++ , GCC (trunk) + libstdc++ .
#include <format> #include <initializer_list> #include <iomanip> #include <iostream> #include <string_view> int main() { char buffer[64]; for (std::size_t max_chars_to_write : {std::size(buffer) - 1, 23uz, 21uz}) { const std::format_to_n_result result = std::format_to_n( buffer, max_chars_to_write, "Hubble's H{2} {3} {0}{4}{1} km/sec/Mpc.", // 24 bytes w/o formatters 71, // {0}, occupies 2 bytes 8, // {1}, occupies 1 byte "\u2080", // {2}, occupies 3 bytes, '₀' (SUBSCRIPT ZERO) "\u2245", // {3}, occupies 3 bytes, '≅' (APPROXIMATELY EQUAL TO) "\u00B1" // {4}, occupies 2 bytes, '±' (PLUS-MINUS SIGN) ); // 24 + 2 + 1 + 3 + 3 + 2 == 35, no trailing '\0' *result.out = '\0'; // adds terminator to buffer const std::string_view str(buffer, result.out); std::cout << "Buffer until '\\0': " << std::quoted(str) << '\n' << "Max chars to write: " << max_chars_to_write << '\n' << "result.out offset: " << result.out - buffer << '\n' << "Untruncated output size: " << result.size << "\n\n"; } }
Ausgabe:
Buffer until '\0': "Hubble's H₀ ≅ 71±8 km/sec/Mpc." Max chars to write: 63 result.out offset: 35 Untruncated output size: 35 Buffer until '\0': "Hubble's H₀ ≅ 71±8" Max chars to write: 23 result.out offset: 23 Untruncated output size: 35 Buffer until '\0': "Hubble's H₀ ≅ 71�" Max chars to write: 21 result.out offset: 21 Untruncated output size: 35
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 Compilezeit-Fehler |
| 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)
|
speichert die formatierte Darstellung der Argumente in einem neuen String
(Funktions-Template) |
|
(C++20)
|
gibt die formatierte Darstellung seiner Argumente über einen Output-Iterator aus
(Funktions-Template) |
|
(C++20)
|
bestimmt die Anzahl der Zeichen, die zur Speicherung der formatierten Darstellung seiner Argumente erforderlich sind
(Funktions-Template) |