std::numpunct
来自 cppreference.cn
定义于头文件 <locale> |
||
template< class CharT > class numpunct; |
||
`std::numpunct` facet 封装了数字标点偏好设置。流 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> |
[编辑] 数据成员
成员 | 描述 |
std::locale::id id [static] |
facet 的标识符 |
[编辑] 成员函数
构造一个新的 numpunct facet(public member function) | |
销毁一个 numpunct facet(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 protected member function) |
[虚拟] |
提供用作千位分隔符的字符 (virtual protected member function) |
[虚拟] |
提供每对千位分隔符之间的数字个数 (virtual protected member function) |
提供用作布尔值 true 和 false 名称的字符串 (virtual protected member function) |
[编辑] 示例
以下示例更改了布尔值 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++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 338 | C++98 | `sign` 令牌允许 `+` 或 `-` 后面有一个可选的空白 | 已移除空白 |
[编辑] 另请参阅
为指定语言环境创建一个 numpunct facet (类模板) |