名前空間
変種
操作

std::to_chars

提供: cppreference.com
< cpp‎ | utility
 
 
 
ヘッダ <charconv> で定義
std::to_chars_result to_chars(char* first, char* last,
                              /*see below*/ value, int base = 10);
(1) (C++17以上)
std::to_chars_result to_chars(char* first, char* last, float       value);

std::to_chars_result to_chars(char* first, char* last, double      value);

std::to_chars_result to_chars(char* first, char* last, long double value);
(2) (C++17以上)
std::to_chars_result to_chars(char* first, char* last, float       value,

                              std::chars_format fmt);
std::to_chars_result to_chars(char* first, char* last, double      value,
                              std::chars_format fmt);
std::to_chars_result to_chars(char* first, char* last, long double value,

                              std::chars_format fmt);
(3) (C++17以上)
std::to_chars_result to_chars(char* first, char* last, float       value,

                              std::chars_format fmt, int precision);
std::to_chars_result to_chars(char* first, char* last, double      value,
                              std::chars_format fmt, int precision);
std::to_chars_result to_chars(char* first, char* last, long double value,

                              std::chars_format fmt, int precision);
(4) (C++17以上)
struct to_chars_result {

    char* ptr;
    std::errc ec;

};
(5) (C++17以上)

範囲 [first, last) を連続的に埋めることによって、 value を文字列に変換します。 [first, last) は有効な範囲であることが要求されます

1) 整数のフォーマッタ。 valuebase 進数の数字の文字列に変換されます (先頭の冗長なゼロは付きません)。 範囲 10..35 (両端を含む) の数字は小文字 a..z で表現されます。 値がゼロより小さい場合、表現はマイナス記号で開始されます。 ライブラリは、引数 value の型として、すべての符号付きおよび符号なし整数型および char 型に対するオーバーロードを提供します。
2) 値は、デフォルトのロケール ("C") において std::printf によって行われたかのように、文字列に変換されます。 変換指定子は f または e であり、最も短い表現のための要件 (基数点 (もしあれば) より前に少なくとも1桁あり、対応する std::from_chars 関数を用いて表現を解析したときに値を正確に復元できるような、最小の文字数) に従って選択されます (引き分けの場合は f が優先されます)。 そのような表現が複数ある場合は、 value との差が最も小さいものが選ばれ、あらゆる残りの引き分けは std::round_to_nearest に従った丸めを用いて解決されます。
3) (2) と同じですが、 printf のどの変換指定子によって行われたかのようになるかは、 fmtstd::chars_format::fixed の場合は ffmtstd::chars_format::scientific の場合は efmtstd::chars_format::hex の場合は a (ただし結果に先頭の "0x" は付きません)、 fmtchars_format::general の場合は g です。
4) (3) と同じですが、最も短い表現の要件ではなく引数 precision によって精度が指定されます。
5) 戻り値の型 (下の戻り値を参照してください)。

目次

[編集] 引数

first, last - 書き込み先の文字の範囲
value - 文字列表現に変換する値
base - 使用する基数、2から36まで (両端を含む) の値
fmt - 使用する浮動小数点の書式、 std::chars_format 型のビットマスク
precision - 使用する浮動小数点の精度

[編集] 戻り値

成功した場合は、 ec が値初期化された std::errc と等しく、 ptr が書き込まれた最後の文字の次を指すポインタであるような、 to_chars_result 型の値を返します。 文字列はヌル終端されないことに注意してください。

エラーの場合は、 ecstd::errc::value_too_large を保持し、 ptr に値 last のコピーを保持するような to_chars_result 型の値を返します。 範囲 [first, last) の内容は未規定な状態に置かれます。

[編集] 例外

(なし)

[編集] ノート

C++ および C のライブラリの他のフォーマット関数と異なり、 std::to_chars はロケール非依存であり、確保を行わず、例外を投げません。 他のライブラリ (std::sprintf など) によって使用されるフォーマットポリシーの小さなサブセットのみが提供されます。 これは、テキストベースのやりとり (JSON や XML) などの、一般的な高スループットの文脈において便利な、可能な最も高速な実装を可能とすることが意図されています。

to_chars によってフォーマットされたすべての浮動小数点値が std::from_chars で正確に復元できるという保証は、両方の関数が同じ処理系による場合にのみ提供されます。

[編集]

#include <iostream>
#include <charconv>
#include <system_error>
#include <string_view>
#include <array>
 
int main()
{
    std::array<char, 10> str;
 
    if(auto [p, ec] = std::to_chars(str.data(), str.data() + str.size(), 42);
       ec == std::errc())
        std::cout << std::string_view(str.data(), p - str.data());
}

出力:

42

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 2955 C++17 this function was in <utility> and used std::error_code moved to <charconv> and uses std::errc


[編集] 関連項目

文字シーケンスを整数値または浮動小数点値に変換します
(関数) [edit]
(C++11)
整数または浮動小数点値を string に変換します
(関数) [edit]
stdout、ファイルストリームまたはバッファに書式付き出力を行います
(関数) [edit]
書式付きデータを挿入します
(std::basic_ostreamのパブリックメンバ関数) [edit]