std::numpunct<CharT>::grouping, std::numpunct<CharT>::do_grouping

来自cppreference.com
< cpp‎ | locale‎ | numpunct
定义于头文件 <locale>
public:
std::string grouping() const;
(1)
protected:
virtual std::string do_grouping() const;
(2)
1) 公开成员函数,调用最终导出类的成员函数 do_grouping
2) 返回 std::string ,其每个 char 元素中保有 num_put::put() (从而还有 basic_ostream::operator<< )所格式化的数值输出的每组位数。

组以二进制值存储:三位组为 '\3' ,而 51 位组为 '3' 。返回的字符串的位于零下标的字符,保有最右组中的位数。位于 1 下标的字符保有第二右的组中的位数,等等。返回字符串中的最后字符所指示的分组被复用于数(的左部分)中所有剩余数位的分组。

返回值

保有分组的 std::string 类型对象。 std::numpunct 的标准特化返回空字符串,指示无分组。典型分组(例如 en_US 本地环境)返回 "\003"

示例

#include <iostream>
#include <limits>
#include <locale>
 
struct space_out : std::numpunct<char>
{
    char do_thousands_sep()   const { return ' ';  } // 以空格分隔
    std::string do_grouping() const { return "\1"; } // 1 位组
};
 
struct g123 : std::numpunct<char>
{
    std::string do_grouping() const { return "\1\2\3"; }
};
 
int main()
{
    std::cout << "default locale: " << 12345678 << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
    std::cout << "locale with modified numpunct: " << 12345678 << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new g123));
    std::cout << "Locale with \\1\\2\\3 grouping: " << 
              std::numeric_limits<unsigned long long>::max() << '\n';
}

输出:

default locale: 12345678
locale with modified numpunct: 1 2 3 4 5 6 7 8
Locale with \1\2\3 grouping: 18,446,744,073,709,551,61,5

参阅

提供用作千分隔符的字符
(虚受保护成员函数)