std::numpunct
来自 cppreference.com
定义在头文件 <locale> 中 |
||
template< class CharT > class numpunct; |
||
方面 std::numpunct
封装了数字标点符号的偏好。流 I/O 操作通过 std::num_get 和 std::num_put 使用 std::numpunct
来解析数字输入和格式化数字输出。
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'
继承图
内容 |
[编辑] 特化
标准库保证提供以下特化(它们需要由任何区域设置对象实现)
定义在头文件
<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_truename 或 do_falsename (公共成员函数) |
[编辑] 受保护成员函数
[虚拟] |
提供用作小数点的字符 (虚拟受保护成员函数) |
[虚拟] |
提供用作千位分隔符的字符 (虚拟受保护成员函数) |
[虚拟] |
提供每对千位分隔符之间的数字数量 (虚拟受保护成员函数) |
提供用作布尔值 true 和 false 的名称的字符串 (虚拟受保护成员函数) |
[编辑] 成员对象
static std::locale::id id |
区域设置的 id (公共成员对象) |
[编辑] 示例
以下示例更改 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 方面 (类模板) |