Namespaces
Variants

std:: to_chars

From cppreference.net
ヘッダーで定義 <charconv>
std :: to_chars_result

to_chars ( char * first, char * last,

/* integer-type */ value, int base = 10 ) ;
(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,

std:: chars_format fmt ) ;
(4) (C++17以降)
std :: to_chars_result

to_chars ( char * first, char * last, /* floating-point-type */ value,

std:: chars_format fmt, int precision ) ;
(5) (C++17以降)

value を文字列に変換し、範囲 [ first , last ) を連続的に埋めていきます。ここで [ first , last ) 有効な範囲 である必要があります。

1) 整数フォーマッタ: value は指定された base で数字の文字列に変換されます(冗長な先行ゼロはありません)。 10..35 の範囲の数字は小文字の a..z で表されます。valueがゼロ未満の場合、表現はマイナス記号で始まります。ライブラリは、すべてのcv修飾されていない符号付きおよび符号なし整数型と、 char 型のパラメータ value に対するオーバーロードを提供します。
2) bool のオーバーロードは削除されています。 std::to_chars bool 型の引数を拒否します。なぜなら、許可された場合の結果が "false" / "true" ではなく "0" / "1" になるためです。
3) value はデフォルト("C")ロケールにおける std::printf 形式で文字列に変換される。変換指定子は f または e であり(同点の場合は f が優先される)、最短表現の要件に従って選択される:文字列表現は、基数点の前に少なくとも1桁の数字があり(存在する場合)、対応する std::from_chars 関数を使用して表現を解析すると正確に値が復元される最小文字数で構成される。そのような表現が複数ある場合、 value との差が最小の表現が選択され、残りの同点は std::round_to_nearest に従った丸めによって解決される。ライブラリは、パラメータ value の型として、すべてのCV修飾されない 標準 (C++23まで) 浮動小数点型に対するオーバーロードを提供する。
4) (3) と同様だが、as-if printfで指定される変換は以下の通り: f fmt std::chars_format::fixed の場合、 e fmt std::chars_format::scientific の場合、 a (ただし結果の先頭に"0x"が付かない)は fmt std::chars_format::hex の場合、 g fmt chars_format::general の場合。ライブラリは、パラメータ value の型として、すべてのCV修飾されない 標準 (C++23まで) 浮動小数点型に対するオーバーロードを提供する。
5) (4) と同様であるが、精度が最短表現の要件ではなく、パラメータ precision によって指定される点が異なる。ライブラリは、パラメータ value の型として、すべてのcv修飾されていない 標準 (C++23まで) 浮動小数点型に対するオーバーロードを提供する。

目次

パラメータ

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 に追加メンバーが存在する可能性があった 追加メンバーは禁止される

関連項目

std::to_chars の戻り値型
(クラス)
(C++17)
文字シーケンスを整数値または浮動小数点値に変換する
(関数)
(C++11)
整数値または浮動小数点値を string に変換する
(関数)
書式付き出力を stdout 、ファイルストリーム、またはバッファに出力する
(関数)
書式付きデータを挿入する
( std::basic_ostream<CharT,Traits> の公開メンバ関数)