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 <iostream>
#include <vector>
#include <string_view>
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 { "₀"sv }; // { "\u2080"sv } => { 0xe2, 0x82, 0x80 };
constexpr auto aprox_equ { "≅"sv }; // { "\u2245"sv } => { 0xe2, 0x89, 0x85 };
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. Note: 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::string_view{buffer.data(), min_buffer_size} << "\"\n";
// Or we can print the buffer directly by adding the trailing '\0'.
buffer.push_back('\0');
std::cout << "Buffer: \"" << 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/w/cpp/utility/format/formatted_size