std:: formatted_size
|
Определено в заголовочном файле
<format>
|
||
|
template
<
class
...
Args
>
std:: size_t formatted_size ( std:: format_string < Args... > fmt, Args && ... args ) ; |
(1) | (начиная с C++20) |
|
template
<
class
...
Args
>
std:: size_t formatted_size ( std:: wformat_string < Args... > fmt, Args && ... args ) ; |
(2) | (начиная с C++20) |
|
template
<
class
...
Args
>
std::
size_t
formatted_size
(
const
std::
locale
&
loc,
|
(3) | (начиная с C++20) |
|
template
<
class
...
Args
>
std::
size_t
formatted_size
(
const
std::
locale
&
loc,
|
(4) | (начиная с C++20) |
Определите общее количество символов в форматированной строке, форматируя args в соответствии с строкой формата fmt . Если присутствует, loc используется для локале-специфичного форматирования.
Поведение не определено, если
std::
formatter
<
std::
remove_cvref_t
<
Ti
>
, CharT
>
не удовлетворяет требованиям
BasicFormatter
для любого
Ti
в
Args
.
Содержание |
Параметры
| fmt | - |
объект, представляющий строку формата. Строка формата состоит из:
Каждое поле замены имеет следующий формат:
1)
поле замены без спецификации формата
2)
поле замены со спецификацией формата
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | аргументы для форматирования | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale , используемая для локале-зависимого форматирования | ||||||||||||||||||||||||||||||||||||||||||||||
Возвращаемое значение
Общее количество символов в форматированной строке.
Исключения
Распространяет любое исключение, выброшенное форматтером.
Пример
#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'; }
Вывод:
Min buffer size = 37 Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc." Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам 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)
|
записывает форматированное представление своих аргументов через выходной итератор
(function template) |
|
(C++20)
|
записывает форматированное представление своих аргументов через выходной итератор, не превышая указанный размер
(function template) |