std::to_chars
ヘッダ <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*, char*, bool, int=10)= delete; | (2) | (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); | (3) | (C++17以上) |
std::to_chars_result to_chars(char* first, char* last, float value, std::chars_format fmt); | (4) | (C++17以上) |
std::to_chars_result to_chars(char* first, char* last, float value, std::chars_format fmt, int precision); | (5) | (C++17以上) |
struct to_chars_result { char* ptr; | (6) | (C++17以上) |
範囲 [first, last)
を連続的に埋めることによって、 value
を文字列に変換します。 [first, last)
は有効な範囲であることが要求されます
value
は base
進数の数字の文字列に変換されます (先頭の冗長なゼロは付きません)。 範囲 10..35
(両端を含む) の数字は小文字 a..z
で表現されます。 値がゼロより小さい場合、表現はマイナス記号で開始されます。 ライブラリは、引数 value
の型として、すべての符号付きおよび符号なし整数型および char
型に対するオーバーロードを提供します。value
との差が最も小さいものが選ばれ、あらゆる残りの引き分けは std::round_to_nearest に従った丸めを用いて解決されます。fmt
が std::chars_format::fixed の場合は f、 fmt
が std::chars_format::scientific の場合は e、 fmt
が std::chars_format::hex の場合は a (ただし結果に先頭の "0x" は付きません)、 fmt
が chars_format::general の場合は g です。precision
によって精度が指定されます。std::to_chars_result
は基底クラスや、 ptr
、 ec
および暗黙に宣言された特別なメンバ関数以外のメンバを持っていません。目次 |
[編集]引数
first, last | - | 書き込み先の文字の範囲 |
value | - | 文字列表現に変換する値 |
base | - | 使用する基数、2から36まで (両端を含む) の値 |
fmt | - | 使用する浮動小数点の書式、 std::chars_format 型のビットマスク |
precision | - | 使用する浮動小数点の精度 |
[編集]戻り値
成功した場合は、 ec
が値初期化された std::errc と等しく、 ptr
が書き込まれた最後の文字の次を指すポインタであるような、 to_chars_result
型の値を返します。 文字列はヌル終端されないことに注意してください。
エラーの場合は、 ec
に std::errc::value_too_large を保持し、 ptr
に値 last
のコピーを保持するような to_chars_result
型の値を返します。 範囲 [first, last)
の内容は未規定な状態に置かれます。
operator==(std::to_chars_result)
friendbool operator==(const to_chars_result&, const to_chars_result&)=default; | (C++20以上) | |
両方の引数の ptr
および ec
がそれぞれ等しいかどうか調べます。
この関数は通常の無修飾または修飾付きの名前探索に対しては可視ではなく、 std::to_chars_result
が引数の関連クラスであるときの実引数依存の名前探索によってのみ発見されます。
[編集]例外
(なし)
[編集]ノート
C++ および C のライブラリの他のフォーマット関数と異なり、 std::to_chars
はロケール非依存であり、確保を行わず、例外を投げません。 他のライブラリ (std::sprintf など) によって使用されるフォーマットポリシーの小さなサブセットのみが提供されます。 これは、テキストベースのやりとり (JSON や XML) などの、一般的な高スループットの文脈において便利な、可能な最も高速な実装を可能とすることが意図されています。
to_chars
によってフォーマットされたすべての浮動小数点値が std::from_chars で正確に復元できるという保証は、両方の関数が同じ処理系による場合にのみ提供されます。
bool 値を "0"/"1" としてフォーマットしたい場合は、他の整数型に明示的にキャストする必要があります。
[編集]例
#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 |
LWG 3266 | C++17 | bool argument was accepted and promoted to int | rejected by a deleted overload |
LWG 3373 | C++17 | to_chars_result might have additional members | additional members are disallowed |
[編集]関連項目
(C++17) | 文字シーケンスを整数値または浮動小数点値に変換します (関数) |
(C++11) | 整数または浮動小数点値を string に変換します (関数) |
(C++11) | stdout、ファイルストリームまたはバッファに書式付き出力を行います (関数) |
書式付きデータを挿入します ( std::basic_ostream<CharT,Traits> のパブリックメンバ関数) |