Localization library | |||||||||||||||||||||||||
Regular expressions library(C++11) | |||||||||||||||||||||||||
Formatting library(C++20) | |||||||||||||||||||||||||
Null-terminated sequence utilities | |||||||||||||||||||||||||
Byte strings | |||||||||||||||||||||||||
Multibyte strings | |||||||||||||||||||||||||
Wide strings | |||||||||||||||||||||||||
Primitive numeric conversions | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Text encoding identifications | |||||||||||||||||||||||||
|
Defined in header <charconv> | ||
std::to_chars_result to_chars(char* first,char* last, | (1) | (since C++17) (constexpr since C++23) |
std::to_chars_result to_chars(char*,char*,bool,int=10)= delete; | (2) | (since C++17) |
std::to_chars_result to_chars(char* first,char* last,/* floating-point-type */ value); | (3) | (since C++17) |
std::to_chars_result to_chars(char* first,char* last,/* floating-point-type */ value, | (4) | (since C++17) |
std::to_chars_result to_chars(char* first,char* last,/* floating-point-type */ value, | (5) | (since C++17) |
Convertsvalue into a character string by successively filling the range[
first,
last)
, where[
first,
last)
is required to be avalid range.
10..35
(inclusive) are represented as lowercase charactersa..z
. If value is less than zero, the representation starts with a minus sign. The library provides overloads for all cv-unqualified signed and unsigned integer types and for the typechar as the type of the parametervalue.std::to_chars
rejects argument of typebool because the result would be"0"/"1" but not"false"/"true" if it is permitted.Contents |
first, last | - | character range to write to |
value | - | the value to convert to its string representation |
base | - | integer base to use: a value between 2 and 36 (inclusive). |
fmt | - | floating-point formatting to use, a bitmask of typestd::chars_format |
precision | - | floating-point precision to use |
On success, returns a value of typestd::to_chars_result such thatec
equals value-initializedstd::errc andptr
is the one-past-the-end pointer of the characters written. Note that the string isnot NUL-terminated.
On error, returns a value of typestd::to_chars_result holdingstd::errc::value_too_large inec
, a copy of the valuelast inptr
, and leaves the contents of the range[
first,
last)
in unspecified state.
Throws nothing.
Unlike other formatting functions in C++ and C libraries,std::to_chars
is locale-independent, non-allocating, and non-throwing. Only a small subset of formatting policies used by other libraries (such asstd::sprintf) is provided. This is intended to allow the fastest possible implementation that is useful in common high-throughput contexts such as text-based interchange (JSON orXML).
The guarantee thatstd::from_chars can recover every floating-point value formatted bystd::to_chars
exactly is only provided if both functions are from the same implementation.
To format abool value as"0"/"1" usingstd::to_chars
, the value must be cast to another integer type.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_to_chars | 201611L | (C++17) | Elementary string conversions (std::to_chars ,std::from_chars) |
202306L | (C++26) | Testing for success or failure of<charconv> functions | |
__cpp_lib_constexpr_charconv | 202207L | (C++23) | Addconstexpr modifiers tostd::to_chars andstd::from_chars overloads(1) for integral types |
#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);}
Possible output:
"42""3.14159""-3.14159""-3.142e+00"Value too large for defined data type
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2955 | C++17 | this function was in<utility> and usedstd::error_code | moved to<charconv> and usesstd::errc |
LWG 3266 | C++17 | bool argument was accepted and promoted toint | rejected by a deleted overload |
LWG 3373 | C++17 | std::to_chars_result might have additional members | additional members are disallowed |
(C++17) | the return type ofstd::to_chars (class)[edit] |
(C++17) | converts a character sequence to an integer or floating-point value (function)[edit] |
(C++11) | converts an integral or floating-point value tostring (function)[edit] |
(C++11) | prints formatted output tostdout, a file stream or a buffer (function)[edit] |
inserts formatted data (public member function of std::basic_ostream<CharT,Traits> )[edit] |