std::numpunct

来自cppreference.com
< cpp‎ | locale
 
 
本地化库
本地环境与平面
本地环境
平面类别基类
ctype(字符类别)平面
numeric(数值)平面
numpunct
collate(对照比较)平面
time(时间)平面
monetary(货币)平面
messages(消息)平面
字符分类与转换
字符分类
转换
编码转换平面
(C++11)    
C 本地环境
 
 
在标头 <locale> 定义
template< class CharT >
class numpunct;

平面 std::numpunct 封装数值标点偏好。流输入/输出操作通过 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 { return "vrai"; }
    string_type do_falsename() const { return "faux"; }
};
 
int main()
{
    std::cout << "默认本地环境:"
              << std::boolalpha << true << "," << false << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new french_bool));
    std::cout << "修改 numpunct 后的本地环境:"
              << std::boolalpha << true << "," << false << '\n';
}

输出:

默认本地环境:true,false
修改 numpunct 后的本地环境:vrai,faux

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 338 C++98 sign 记号允许在 +- 后添加一个空白字符 移除该空白字符

参阅

为具名本地环境创建 numpunct 平面
(类模板)