命名空间
变体
操作

std::numpunct

来自 cppreference.com
< cpp‎ | locale
 
 
 
 
定义在头文件 <locale>
template< class CharT >
class numpunct;

方面 std::numpunct 封装了数字标点符号的偏好。流 I/O 操作通过 std::num_getstd::num_put 使用 std::numpunct 来解析数字输入和格式化数字输出。

std::numpunct 支持的数字格式如下所示。这里 digit 代表由 fmtflags 参数值指定的基数集,thousands-sepdecimal-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/facetstd-numpunct-inheritance.svg

继承图

内容

[编辑] 特化

标准库保证提供以下特化(它们需要由任何区域设置对象实现

定义在头文件 <locale>
std::numpunct<char> 提供 "C" 区域设置偏好的等效项
std::numpunct<wchar_t> 提供 "C" 区域设置偏好的宽字符等效项

[编辑] 成员类型

成员类型 定义
char_type CharT
string_type std::basic_string<CharT>

[编辑] 成员函数

构造一个新的 numpunct 方面
(公共成员函数) [编辑]
析构 numpunct 方面
(受保护成员函数) [编辑]
调用 do_decimal_point
(公共成员函数) [编辑]
调用 do_thousands_sep
(公共成员函数) [编辑]
调用 do_grouping
(公共成员函数) [编辑]
调用 do_truenamedo_falsename
(公共成员函数) [编辑]

[编辑] 受保护成员函数

提供用作小数点的字符
(虚拟受保护成员函数) [编辑]
提供用作千位分隔符的字符
(虚拟受保护成员函数) [编辑]
[虚拟]
提供每对千位分隔符之间的数字数量
(虚拟受保护成员函数) [编辑]
提供用作布尔值 truefalse 的名称的字符串
(虚拟受保护成员函数) [编辑]

[编辑] 成员对象

static std::locale::id id
区域设置的 id
(公共成员对象)

[编辑] 示例

以下示例更改 truefalse 的字符串表示形式

#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 方面
(类模板)