std:: to_chars
|
ヘッダーで定義
<charconv>
|
||
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
|
(1) |
(C++17以降)
(C++23でconstexpr) |
|
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
で表されます。valueがゼロ未満の場合、表現はマイナス記号で始まります。ライブラリは、すべてのcv修飾されていない符号付きおよび符号なし整数型と、
char
型のパラメータ
value
に対するオーバーロードを提供します。
std::to_chars
は
bool
型の引数を拒否します。なぜなら、許可された場合の結果が
"false"
/
"true"
ではなく
"0"
/
"1"
になるためです。
目次 |
パラメータ
| first, last | - | 書き込み先の文字範囲 |
| value | - | 文字列表現に変換する値 |
| base | - | 使用する整数基数:2から36までの値(両端を含む) |
| fmt | - | 使用する浮動小数点フォーマット、 std::chars_format 型のビットマスク |
| precision | - | 使用する浮動小数点精度 |
戻り値
成功時は、型
std::to_chars_result
の値を返し、
ec
が値初期化された
std::errc
と等しく、
ptr
が書き込まれた文字の終端次ポインタとなる。なお、文字列は
NUL終端
されていないことに注意。
エラーの場合、
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 によってすべての浮動小数点値を正確に復元できるという保証は、両方の関数が同じ実装からのものである場合にのみ提供されます。
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) |
std::to_chars
および
std::from_chars
オーバーロードへの
constexpr
修飾子の追加
(
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 | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2955 | C++17 | この関数は <utility> にあり、 std::error_code を使用していた | <charconv> に移動され、 std::errc を使用する |
| LWG 3266 | C++17 | bool 引数が受け入れられ、 int に昇格していた | 削除されたオーバーロードによって拒否される |
| LWG 3373 | C++17 |
std::to_chars_result
に追加メンバーが存在する可能性があった
|
追加メンバーは禁止される |
関連項目
|
(C++17)
|
std::to_chars
の戻り値型
(クラス) |
|
(C++17)
|
文字シーケンスを整数値または浮動小数点値に変換する
(関数) |
|
(C++11)
|
整数値または浮動小数点値を
string
に変換する
(関数) |
|
(C++11)
|
書式付き出力を
stdout
、ファイルストリーム、またはバッファに出力する
(関数) |
|
書式付きデータを挿入する
(
std::basic_ostream<CharT,Traits>
の公開メンバ関数)
|