コンテンツにスキップ

C++/標準ライブラリ/charconv

出典: フリー教科書『ウィキブックス(Wikibooks)』

22.13 Primitive numeric conversions (charconv)

[編集]

22.13.1 Header <charconv> synopsis (charconv.syn)

[編集]

このセクションでは、<charconv>ヘッダーに含まれる基本的な数値変換機能について概説します。

基本型プレースホルダーの説明
  • integer-typeとして指定された関数は、すべてのcv修飾されていない符号付きおよび符号なし整数型とcharに対してオーバーロードが提供されます。
  • floating-point-typeとして指定された関数は、すべてのcv修飾されていない浮動小数点型に対してオーバーロードが提供されます。
列挙型 chars_format
  • 浮動小数点数値変換のための書式指定。
  • scientific, fixed, hex, generalの4つの書式が定義されています。
namespace std {

// floating-point format for primitive numerical conversion
enum class chars_format {
    scientific = unspecified,
    fixed = unspecified,
    hex = unspecified,
    general = fixed | scientific
};

// 22.13.2, primitive numerical output conversion
struct to_chars_result {
    char* ptr;
    errc ec;
    friend bool operator==(const to_chars_result&, const to_chars_result&) = default;
};

constexpr to_chars_result to_chars(char* first, char* last, integer-type value, int base = 10);
to_chars_result to_chars(char* first, char* last, bool value, int base = 10) = delete;
to_chars_result to_chars(char* first, char* last, floating-point-type value);
to_chars_result to_chars(char* first, char* last, floating-point-type value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, floating-point-type value,
chars_format fmt, int precision);

// 22.13.3, primitive numerical input conversion
struct from_chars_result {
    const char* ptr;
    errc ec;
    friend bool operator==(const from_chars_result&, const from_chars_result&) = default;
};

constexpr from_chars_result from_chars(const char* first, const char* last,
    integer-type & value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, floating-point-type & value,
    chars_format fmt = chars_format::general);
}
  • chars_formatはビットマスク型であり、scientific, fixed, hexの要素があります。
  • to_chars_resultおよびfrom_chars_resultは、データメンバーと特別なメンバーを持つ指定された型です。

22.13.2 Primitive numeric output conversion (charconv.to.chars)

[編集]

このセクションでは、to_chars関数を使用して数値を文字列に変換する方法を説明します。

一般的な動作
  • すべてのto_chars関数は、数値を文字列に変換し、範囲[first, last)に書き込みます。
  • 成功時には、to_chars_resultecメンバーはvalue-initializedされたerrcと等しく、ptrメンバーは書き込まれた文字の終端を指します。
  • 失敗時には、ecメンバーはerrc::value_too_largeを持ち、ptrメンバーはlastを指し、範囲[first, last)の内容は未指定です。
浮動小数点数値の変換
  • 精度パラメータなしで浮動小数点数値を受け取る関数は、最小の文字数で値を正確に再現できる文字列を生成します。
  • 浮動小数点値を変換する関数で、chars_formatパラメータを受け取る場合、指定された形式(fixed, scientific, hex, general)に従って変換を行います。
constexpr to_chars_result to_chars(char* first, char* last, integer-type value, int base = 10);
to_chars_result to_chars(char* first, char* last, floating-point-type value);
to_chars_result to_chars(char* first, char* last, floating-point-type value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, floating-point-type value,
chars_format fmt, int precision);
整数型の変換
baseは2から36までの値である必要があります。
負の値の場合、変換された文字列は'-'で始まります。
浮動小数点型の変換
値はprintfスタイルで変換され、Cロケールが使用されます。
chars_formatに従って変換され、必要に応じて精度も指定できます。

22.13.3 Primitive numeric input conversion (charconv.from.chars)

[編集]

このセクションでは、from_chars関数を使用して文字列を数値に変換する方法を説明します。

一般的な動作
  • すべてのfrom_chars関数は、文字列[first, last)を解析し、数値に変換します。
  • パターンに一致する文字がない場合、値は変更されず、from_chars_resultptrメンバーはfirstを指し、ecメンバーはerrc::invalid_argumentと等しくなります。
  • 変換に成功した場合、ptrメンバーは一致しなかった最初の文字を指し、またはすべての文字が一致した場合はlastを指します。
整数型の変換
  • baseは2から36までの値である必要があります。
  • 符号は負号-のみ許可されます。
浮動小数点型の変換
  • 解析パターンはCロケールでのstrtodと同様です。
  • chars_formatに応じて、浮動小数点数の変換を行います。
constexpr from_chars_result from_chars(const char* first, const char* last,
    integer-type & value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, floating-point-type & value,
    chars_format fmt = chars_format::general);
整数型の変換
パターンは指定された基数に基づいており、余分な先行ゼロは含まれません。
浮動小数点型の変換
chars_formatに応じた変換を行い、+符号は指数部分にのみ現れることが許可されます。

このヘッダーは、文字列と数値間の基本的な変換を効率的に行うための機能を提供します。