Пространства имён
Варианты
Действия

std::formatted_size

Материал из cppreference.com
< cpp‎ | utility‎ | format
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Библиотека форматирования
Функции форматирования
(C++20)
(C++20)
formatted_size
(C++20)
(C++20)
(C++20)
Концепты форматирования
Форматировщик
(C++20)
Аргументы форматирования
(C++20)(устарело в C++26)
Ошибка формата
 
Определено в заголовочном файле <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(conststd::locale& loc,

                            std::format_string<Args...> fmt, Args&&... args);
(3) (начиная с C++20)
template<class... Args>

std::size_t formatted_size(conststd::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 объект, представляющий строку формата. Строка формата состоит из
  • обычных символов (кроме { и }), которые копируются в вывод без изменений,
  • управляющих последовательностей {{ и }}, которые заменяются на { и } соответственно в выводе, и
  • заменяемых полей.

Каждое поле замены имеет следующий формат:

{идентификатор-аргумента(необязательно)} (1)
{идентификатор-аргумента(необязательно):спецификатор-формата} (2)
1) поле замены без указания формата
2) поле замены со спецификацией формата
идентификатор-аргумента указывает индекс аргумента в args, значение которого должно использоваться для форматирования; если он опущен, аргументы используются по порядку.

идентификаторы-аргументов в строке формата должны присутствовать все или быть опущены. Смешение ручной и автоматической индексации является ошибкой.

спецификатор-формата спецификация формата, определённая специализацией std::formatter для соответствующего аргумента.
args... аргументы для форматирования
loc std::locale используется для форматирования, зависящего от локали

[править]Возвращаемое значение

Общее количество символов в форматируемой строке.

[править]Исключения

Распространяет любое исключение, созданное форматером.

[править]Пример

#include <format>#include <iostream>#include <vector>#include <string_view>   int main(){usingnamespace std::literals::string_view_literals;   constexprauto fmt_str {"Hubble's H{0} {1} {2:*^4} miles/sec/mpc."sv };constexprauto sub_zero {"₀"sv };// { "\u2080"sv } => { 0xe2, 0x82, 0x80 };constexprauto aprox_equ {"≅"sv };// { "\u2245"sv } => { 0xe2, 0x89, 0x85 };constexprint Ho {42};// H₀     constauto min_buffer_size = std::formatted_size(fmt_str, sub_zero, aprox_equ, Ho);   std::cout<<"Минимальный размер буфера = "<< min_buffer_size <<'\n';   // Использовать std::vector в качестве динамического буфера.// Примечание: буфер не содержит завершающего символа '\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<<"Буфер: \""<<std::string_view{buffer.data(), min_buffer_size}<<"\"\n";   // Или мы можем распечатать буфер напрямую, добавив в конец '\0'. buffer.push_back('\0');std::cout<<"Буфер: \""<< buffer.data()<<"\"\n";}

Вывод:

Минимальный размер буфера = 37 Буфер: "Hubble's H₀ ≅ *42* miles/sec/mpc." Буфер: "Hubble's H₀ ≅ *42* miles/sec/mpc."

[править]Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
WG не указан C++20 генерирует std::format_error для неверной строки формата неверная строка формата приводит к
ошибке времени компиляции
WG не указан C++20 объекты, которые не являются ни константными, ни копируемыми
(например, объекты, подобные генераторам), не форматируются
форматирование этих объектов разрешено
WG не указан C++20 для этого средства нет видимого пользователем имени представлено имя basic_format_string

[править]Смотрите также

(C++20)
записывает форматированное представление своих аргументов через итератор вывода
(шаблон функции)[править]
записывает форматированное представление своих аргументов через итератор вывода, не превышая заданного размера
(шаблон функции)[править]
close