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

< 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

### 参阅

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