std::from_chars
ヘッダ <charconv> で定義
|
||
std::from_chars_result from_chars(const char* first, const char* last, /*see below*/& value, int base = 10); |
(1) | (C++17以上) |
std::from_chars_result from_chars(const char* first, const char* last, float& value, std::chars_format fmt = std::chars_format::general); |
(2) | (C++17以上) |
std::from_chars_result from_chars(const char* first, const char* last, double& value, std::chars_format fmt = std::chars_format::general); |
(3) | (C++17以上) |
std::from_chars_result from_chars(const char* first, const char* last, long double& value, std::chars_format fmt = std::chars_format::general); |
(4) | (C++17以上) |
struct from_chars_result { const char* ptr; |
(5) | (C++17以上) |
後述のパターンに対して文字シーケンス [first,last)
を解析します。 1文字もパターンにマッチしない場合、またはマッチした文字を解析することによって取得した値が value
の型で表現できない場合、 value
は変更されず、そうでなければ、パターンにマッチした文字が value
に格納される算術値のテキスト表現として解釈されます。
- 16進数の場合、接頭辞 "0x" または "0X" は認識されません。
-
value
が符号付き整数型の場合、マイナス記号のみが認識されます (プラス記号は認識されません)。
value
の参照先の型としてすべての符号付きおよび符号なし整数型および char
に対するオーバーロードを提供します。- プラス記号は指数の外側では認識しません (マイナス記号のみ先頭に許容されます)。
-
fmt
に std::chars_format::scientific がセットされているけれども std::chars_format::fixed がセットされていない場合、指数部は必須です (そうでなければ任意です)。 -
fmt
に std::chars_format::fixed がセットされているけれども std::chars_format::scientific がセットされていない場合、指数は使用できません。 -
fmt
に std::chars_format::hex がセットされている場合、接頭辞 "0x" または "0X" は使用できません (文字列 "0x123" は値 "0" と未解析の残り "x123" になります)。
std::from_chars_result
は基底クラスや、 ptr
、 ec
および暗黙に宣言された特別なメンバ関数以外のメンバを持っていません。目次 |
[編集] 引数
first, last | - | 解析する有効な文字の範囲 |
value | - | 成功した場合に解析した値を格納する出力引数 |
base | - | 使用する基数、2から36まで (両端を含む) の値 |
fmt | - | 使用する浮動小数点の書式、 std::chars_format 型のビットマスク |
[編集] 戻り値
成功した場合は、 ptr
がパターンにマッチしなかった最初の文字またはすべての文字がマッチしたのであれば last
に等しい値を持ち、 ec
が値初期化された、 from_chars_result
型の値を返します。
パターンにマッチしなかった場合は、 ptr
が first
と等しく、 ec
が std::errc::invalid_argument と等しい、 from_chars_result
型の値を返します。 value
は変更されません。
パターンはマッチしたけれども、解析した値が value
の型で表現可能な範囲内でない場合は、 ec
が std::errc::result_out_of_range と等しく、 ptr
がパターンにマッチしなかった最初の文字を指す、 from_chars_result
型の値を返します。 value
は変更されません。
operator==(std::from_chars_result)
friend bool operator==( const from_chars_result&, const from_chars_result& ) = default; |
(C++20以上) | |
両方の引数の ptr
および ec
がそれぞれ等しいかどうか調べます。
この関数は通常の無修飾または修飾付きの名前探索に対しては可視ではなく、 std::from_chars_result
が引数の関連クラスであるときの実引数依存の名前探索によってのみ発見されます。
[編集] 例外
(なし)
[編集] ノート
C++ および C のライブラリの他の解析関数と異なり、 std::from_chars
はロケール非依存であり、確保を行わず、例外を投げません。 他のライブラリ (std::sscanf など) によって使用されるパースポリシーの小さなサブセットのみが提供されます。 これは、テキストベースのやりとり (JSON や XML) などの、一般的な高スループットの文脈において便利な、可能な最も高速な実装を可能とすることが意図されています。
to_chars
によってフォーマットされたすべての浮動小数点値が std::from_chars で正確に復元できるという保証は、両方の関数が同じ処理系による場合にのみ提供されます。
後に数字が続かない符号から構成されるパターンは何にもマッチしないパターンとして扱われます。
[編集] 例
#include <iostream> #include <charconv> #include <array> int main() { std::array<char, 10> str{"42"}; int result; if(auto [p, ec] = std::from_chars(str.data(), str.data()+str.size(), result); ec == std::errc()) std::cout << result; }
出力:
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 3373 | C++17 | from_chars_result might have additional members
|
additional members are disallowed |
[編集] 関連項目
(C++17) |
整数値または浮動小数点値を文字シーケンスに変換します (関数) |
(C++11)(C++11)(C++11) |
文字列を符号付き整数に変換します (関数) |
(C++11)(C++11)(C++11) |
文字列を浮動小数点値に変換します (関数) |
(C++11) |
バイト文字列を整数値に変換します (関数) |
バイト文字列を浮動小数点値に変換します (関数) | |
stdin、ファイルストリームまたはバッファから書式付き入力を行います (関数) | |
書式付きデータを抽出します ( std::basic_istream<CharT,Traits> のパブリックメンバ関数)
|