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,
std::format_string<Args...> fmt, Args&&... args );
| (3) | (начиная с C++20) |
template< class... Args >
std::size_t formatted_size( const std::locale& loc,
std::wformat_string<Args...> fmt, Args&&... args );
| (4) | (начиная с C++20) |
Определяет общее количество символов в отформатированной строке, форматируя args в соответствии со строкой формата fmt. Если задан, loc используется для форматирования с учётом локали.
Поведение не определено, если std::formatter<std::remove_cvref_t<Ti>, CharT> не удовлетворяет требованиям BasicFormatter для любого Ti в Args.
Параметры
| fmt | - | объект, представляющий строку формата. Строка формата состоит из
Каждое поле подстановки имеет следующий формат:
|
||||||||||||||||
| 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 | Применён к | Поведение согласно опубликованной версии | Правильное поведение |
|---|---|---|---|
| P2216R3 | C++20 | выбрасывается std::format_error при недопустимой строке формата | недопустимая строка формата приводит к ошибке времени компиляции |
| P2418R2 | C++20 | объекты, которые нельзя использовать как const или копировать (например, объекты, подобные генераторам), нельзя форматировать | разрешить форматирование этих объектов |
| P2508R1 | C++20 | у этой возможности нет общедоступного имени | имя basic_format_string стало доступно |
См. также
|
(C++20) | записывает форматированное представление аргументов с помощью выходного итератора (шаблон функции) |
|
(C++20) | записывает форматированное представление аргументов с помощью выходного итератора, не превышая заданный размер (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/format/formatted_size