名前空間
変種
操作

std::from_chars

提供: cppreference.com
< cpp‎ | utility
 
 
 
ヘッダ <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;
    std::errc ec;

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

後述のパターンに対して文字シーケンス [first,last) を解析します。 1文字もパターンにマッチしない場合、またはマッチした文字を解析することによって取得した値が value の型で表現できない場合、 value は変更されず、そうでなければ、パターンにマッチした文字が value に格納される算術値のテキスト表現として解釈されます。

1) 整数のパーサ。 デフォルトのロケール ("C") および指定された非ゼロの基数において std::strtol によって使用されるものと同一のパターンを期待します。 ただし、
  • 16進数の場合、接頭辞 "0x" または "0X" は認識されません。
  • value が符号付き整数型の場合、マイナス記号のみが認識されます (プラス記号は認識されません)。
  • 範囲 10..35 (両端を含む) の数字は小文字 a..z で表されます (大文字の数字は認識されません)。
ライブラリは引数 value の参照先の型としてすべての符号付きおよび符号なし整数型および char に対するオーバーロードを提供します。
2-4) 浮動小数点のパーサ。 デフォルトのロケール ("C") において std::strtod によって使用されるのと同一のパターンを期待します。 ただし、
  • プラス記号は指数の外側では認識しません (マイナス記号のみ先頭に許容されます)。
  • fmtstd::chars_format::scientific がセットされているけれども std::chars_format::fixed がセットされていない場合、指数部は必須です (そうでなければ任意です)。
  • fmtstd::chars_format::fixed がセットされているけれども std::chars_format::scientific がセットされていない場合、指数は使用できません。
  • fmtstd::chars_format::hex がセットされている場合、接頭辞 "0x" または "0X" は使用できません (文字列 "0x123" は値 "0" と未解析の残り "x123" になります)。
いずれの場合も、結果の値は、 std::round_to_nearest に従って丸めた後、パターンにマッチした文字列の値に最も近い2つの浮動小数点値のいずれかになります。
5) 戻り値の型 (下の戻り値を参照してください)。

目次

[編集] 引数

first, last - 解析する有効な文字の範囲
value - 成功した場合に解析した値を格納する出力引数
base - 使用する基数、2から36まで (両端を含む) の値
fmt - 使用する浮動小数点の書式、 std::chars_format 型のビットマスク

[編集] 戻り値

成功した場合は、 ptr がパターンにマッチしなかった最初の文字またはすべての文字がマッチしたのであれば last に等しい値を持ち、 ec が値初期化された、 from_chars_result 型の値を返します。

パターンにマッチしなかった場合は、 ptrfirst と等しく、 ecstd::errc::invalid_argument と等しい、 from_chars_result 型の値を返します。 value は変更されません。

パターンはマッチしたけれども、解析した値が value の型で表現可能な範囲内でない場合は、 ecstd::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)
整数値または浮動小数点値を文字シーケンスに変換します
(関数) [edit]
(C++11)(C++11)(C++11)
文字列を符号付き整数に変換します
(関数) [edit]
(C++11)(C++11)(C++11)
文字列を浮動小数点値に変換します
(関数) [edit]
バイト文字列を整数値に変換します
(関数) [edit]
バイト文字列を浮動小数点値に変換します
(関数) [edit]
stdin、ファイルストリームまたはバッファから書式付き入力を行います
(関数) [edit]
書式付きデータを抽出します
(std::basic_istreamのパブリックメンバ関数) [edit]