std:: to_chars
|
Определено в заголовочном файле
<charconv>
|
||
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
|
(1) |
(начиная с C++17)
(constexpr начиная с C++23) |
|
std
::
to_chars_result
to_chars ( char * , char * , bool , int = 10 ) = delete ; |
(2) | (начиная с C++17) |
|
std
::
to_chars_result
to_chars ( char * first, char * last, /* floating-point-type */ value ) ; |
(3) | (начиная с C++17) |
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
/* floating-point-type */
value,
|
(4) | (начиная с C++17) |
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
/* floating-point-type */
value,
|
(5) | (начиная с C++17) |
Преобразует
value
в символьную строку путем последовательного заполнения диапазона
[
first
,
last
)
, где
[
first
,
last
)
должен быть
допустимым диапазоном
.
10..35
(включительно) представляются в виде символов нижнего регистра
a..z
. Если значение меньше нуля, представление начинается со знака минус. Библиотека предоставляет перегрузки для всех cv-неквалифицированных знаковых и беззнаковых целочисленных типов, а также для типа
char
в качестве типа параметра
value
.
std::to_chars
отклоняет аргумент типа
bool
, потому что результатом были бы
"0"
/
"1"
, а не
"false"
/
"true"
, если бы это было разрешено.
Содержание |
Параметры
| first, last | - | диапазон символов для записи |
| value | - | значение для преобразования в строковое представление |
| base | - | целочисленное основание для использования: значение от 2 до 36 (включительно). |
| fmt | - | формат чисел с плавающей точкой для использования, битовая маска типа std::chars_format |
| precision | - | точность чисел с плавающей точкой для использования |
Возвращаемое значение
При успехе возвращает значение типа
std::to_chars_result
такое, что
ec
равно инициализированному значением по умолчанию
std::errc
и
ptr
является указателем на позицию за последним записанным символом. Заметим, что строка
не
завершается нулевым символом.
При ошибке возвращает значение типа
std::to_chars_result
, содержащее
std::errc::value_too_large
в
ec
, копию значения
last
в
ptr
, и оставляет содержимое диапазона
[
first
,
last
)
в неопределённом состоянии.
Исключения
Ничего не выбрасывает.
Примечания
В отличие от других функций форматирования в библиотеках C++ и C,
std::to_chars
не зависит от локали, не выделяет память и не генерирует исключений. Предоставляется лишь небольшое подмножество политик форматирования, используемых другими библиотеками (такими как
std::sprintf
). Это позволяет создать максимально быструю реализацию, полезную в распространённых сценариях с высокой пропускной способностью, таких как текстовый обмен (
JSON
или
XML
).
Гарантия того, что
std::from_chars
может точно восстановить каждое значение с плавающей точкой, отформатированное с помощью
std::to_chars
, предоставляется только если обе функции из одной и той же реализации.
Чтобы отформатировать значение
bool
как
"0"
/
"1"
с использованием
std::to_chars
, значение необходимо привести к другому целочисленному типу.
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_to_chars
|
201611L
|
(C++17) |
Элементарные преобразования строк (
std::to_chars
,
std::from_chars
)
|
202306L
|
(C++26) | Тестирование успеха или неудачи функций <charconv> | |
__cpp_lib_constexpr_charconv
|
202207L
|
(C++23) |
Добавление модификаторов
constexpr
к перегрузкам
std::to_chars
и
std::from_chars
(
1
)
для целочисленных типов
|
Пример
#include <charconv> #include <iomanip> #include <iostream> #include <string_view> #include <system_error> void show_to_chars(auto... format_args) { const size_t buf_size = 10; char buf[buf_size]{}; std::to_chars_result result = std::to_chars(buf, buf + buf_size, format_args...); if (result.ec != std::errc()) std::cout << std::make_error_code(result.ec).message() << '\n'; else { std::string_view str(buf, result.ptr - buf); std::cout << std::quoted(str) << '\n'; } } int main() { show_to_chars(42); show_to_chars(+3.14159F); show_to_chars(-3.14159, std::chars_format::fixed); show_to_chars(-3.14159, std::chars_format::scientific, 3); show_to_chars(3.1415926535, std::chars_format::fixed, 10); }
Возможный вывод:
"42" "3.14159" "-3.14159" "-3.142e+00" Value too large for defined data type
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2955 | C++17 | this function was in <utility> and used std::error_code | moved to <charconv> and uses std::errc |
| LWG 3266 | C++17 | bool argument was accepted and promoted to int | rejected by a deleted overload |
| LWG 3373 | C++17 |
std::to_chars_result
might have additional members
|
additional members are disallowed |
Смотрите также
|
(C++17)
|
тип возвращаемого значения
std::to_chars
(класс) |
|
(C++17)
|
преобразует последовательность символов в целочисленное или значение с плавающей запятой
(функция) |
|
(C++11)
|
преобразует целочисленное значение или значение с плавающей запятой в
string
(функция) |
|
(C++11)
|
выводит форматированный вывод в
stdout
, файловый поток или буфер
(функция) |
|
вставляет форматированные данные
(публичная функция-член
std::basic_ostream<CharT,Traits>
)
|