std:: format_to_n, std:: format_to_n_result
|
Определено в заголовочном файле
<format>
|
||
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(1) | (начиная с C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(2) | (начиная с C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(3) | (начиная с C++20) |
|
template
<
class
OutputIt,
class
...
Args
>
std
::
format_to_n_result
<
OutputIt
>
|
(4) | (начиная с C++20) |
|
Вспомогательные типы
|
||
|
template
<
class
OutputIt
>
struct
format_to_n_result
{
|
(5) | (начиная с C++20) |
Форматируйте args в соответствии со строкой формата fmt и запишите результат в выходной итератор out . Записывается не более n символов. Если присутствует, loc используется для локале-специфичного форматирования.
Пусть
CharT
будет
char
для перегрузок
(1,3)
,
wchar_t
для перегрузок
(2,4)
.
Эти перегрузки участвуют в разрешении перегрузки только если
OutputIt
удовлетворяет концепции
std::
output_iterator
<
const
CharT
&
>
.
Поведение не определено, если
OutputIt
не моделирует (не удовлетворяет семантическим требованиям) концепцию
std::
output_iterator
<
const
CharT
&
>
, или если
std::
formatter
<
std::
remove_cvref_t
<
Ti
>
, CharT
>
не удовлетворяет требованиям
BasicFormatter
для любого
Ti
в
Args
.
std::format_to_n_result
не имеет базовых классов или членов, кроме
out
,
size
и неявно объявленных специальных функций-членов.
Содержание |
Параметры
| out | - | итератор на выходной буфер | ||||||||||||||||||||||||||||||||||||||||||||||
| n | - | максимальное количество символов для записи в буфер | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
Каждое поле замены имеет следующий формат:
1)
поле замены без спецификации формата
2)
поле замены со спецификацией формата
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | аргументы для форматирования | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale , используемый для локале-специфичного форматирования | ||||||||||||||||||||||||||||||||||||||||||||||
Возвращаемое значение
Объект
format_to_n_result
, у которого член
out
является итератором, указывающим за конец выходного диапазона, а член
size
представляет общий (не усеченный) размер вывода.
Исключения
Распространяет любое исключение, вызванное операциями форматирования или итераторов.
Примечания
Реализация libstdc++ до версии GCC-13.3 содержала ошибку в возвращении корректного значения format_to_n_result :: out .
Пример
В Compiler Explorer от Godbolt: 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"; } }
Вывод:
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
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2216R3 | C++20 | throws std::format_error for invalid format string | invalid format string results in compile-time error |
| P2418R2 | C++20 |
objects that are neither const-usable nor copyable
(such as generator-like objects) are not formattable |
allow formatting these objects |
| P2508R1 | C++20 | there's no user-visible name for this facility |
the name
basic_format_string
is exposed
|
Смотрите также
|
(C++20)
|
сохраняет форматированное представление аргументов в новой строке
(шаблон функции) |
|
(C++20)
|
выводит форматированное представление своих аргументов через выходной итератор
(шаблон функции) |
|
(C++20)
|
определяет количество символов, необходимых для хранения форматированного представления своих аргументов
(шаблон функции) |