Namespaces
Variants

std:: numpunct

From cppreference.net
ヘッダーで定義 <locale>
template < class CharT >
class numpunct ;

facet std::numpunct は数値の区切り文字に関する設定をカプセル化します。ストリームI/O操作では、 std::numpunct std::num_get および std::num_put を通じて使用され、数値入力の解析と数値出力のフォーマットを行います。

std::numpunct でサポートされる数値のフォーマットは以下で説明されます。ここで digit fmtflags 引数値で指定された基数セットを表し、 thousands-sep decimal-point はそれぞれ thousands_sep() および decimal_point() 関数の結果です。

整数値のフォーマットは以下の通りです:

integer     ::= [sign] units
sign        ::= plusminus
plusminus   ::= '+' | '-'
units       ::= digits [thousands-sep units]
digits      ::= digit [digits]

thousand-sep の間の桁数( digits の最大サイズ)は、 grouping() の結果によって指定されます。

浮動小数点値のフォーマットは以下の通りです:

floatval    ::= [sign] units [decimal-point [digits]] [e [sign] digits] |
                [sign]        decimal-point  digits   [e [sign] digits]
e           ::= 'e' | 'E'
cpp/locale/locale/facet std-numpunct-inheritance.svg

継承図

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Specializations、Nested types、Data members、Member functions、Protected member functions、Example、Defect reports、See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、ID、リンク先は一切変更していません - 数値や書式設定は完全に保持されています

特殊化

標準ライブラリは以下の特殊化を提供することが保証されています(これらは あらゆるロケールオブジェクトで実装が必須 とされています):

ヘッダーで定義 <locale>
std :: numpunct < char > "C"ロケール設定の同等機能を提供
std :: numpunct < wchar_t > "C"ロケール設定のワイド文字版同等機能を提供

ネスト型

定義
char_type CharT
string_type std:: basic_string < CharT >

データメンバ

メンバー 説明
std::locale::id id [static] facet の識別子

メンバー関数

新しい numpunct ファセットを構築する
(public member function)
numpunct ファセットを破棄する
(protected member function)
do_decimal_point を呼び出す
(public member function)
do_thousands_sep を呼び出す
(public member function)
do_grouping を呼び出す
(public member function)
do_truename または do_falsename を呼び出す
(public member function)

プロテクテッドメンバー関数

小数点として使用する文字を提供する
(仮想保護メンバー関数)
千の区切り文字として使用する文字を提供する
(仮想保護メンバー関数)
[virtual]
千の区切り文字の各ペア間の桁数を提供する
(仮想保護メンバー関数)
ブーリアン値 true および false の名称として使用する文字列を提供する
(仮想保護メンバー関数)

以下の例は、 true false の文字列表現を変更します:

#include <iostream>
#include <locale>
struct french_bool : std::numpunct<char>
{
    string_type do_truename() const override { return "vrai"; }
    string_type do_falsename() const override { return "faux"; }
};
int main()
{
    std::cout << "default locale: "
              << std::boolalpha << true << ", " << false << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new french_bool));
    std::cout << "locale with modified numpunct: "
              << std::boolalpha << true << ", " << false << '\n';
}

出力:

default locale: true, false
locale with modified numpunct: vrai, faux

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 338 C++98 sign トークンは + または - の後にオプションの空白を許可していた 空白を削除

関連項目

指定されたロケール用のnumpunctファセットを作成する
(クラステンプレート)