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" になります)。
目次 |
[編集] 引数
| 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 は変更されません。
[編集] 例外
(なし)
[編集] ノート
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 |
[編集] 関連項目
| (C++17) |
整数値または浮動小数点値を文字シーケンスに変換します (関数) |
| (C++11)(C++11)(C++11) |
文字列を符号付き整数に変換します (関数) |
| (C++11)(C++11)(C++11) |
文字列を浮動小数点値に変換します (関数) |
| バイト文字列を整数値に変換します (関数) | |
| バイト文字列を浮動小数点値に変換します (関数) | |
| stdin、ファイルストリームまたはバッファから書式付き入力を行います (関数) | |
| 書式付きデータを抽出します ( std::basic_istream<CharT,Traits>のパブリックメンバ関数)
|