Namespaces
Variants

std:: numpunct

From cppreference.net
Определено в заголовочном файле <locale>
template < class CharT >
class numpunct ;

Фасет std::numpunct инкапсулирует предпочтения числовой пунктуации. Операции потокового ввода-вывода используют std::numpunct через std::num_get и std::num_put для разбора числового ввода и форматирования числового вывода.

Числа, поддерживаемые 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'
cpp/locale/locale/facet std-numpunct-inheritance.svg

Диаграмма наследования

Содержание

Специализации

Стандартная библиотека гарантированно предоставляет следующие специализации (они должны быть реализованы любым объектом локали ):

Определено в заголовке <locale>
std :: numpunct < char > предоставляет эквиваленты настроек локали "C"
std :: numpunct < wchar_t > предоставляет широкосимвольные эквиваленты настроек локали "C"

Вложенные типы

Тип Определение
char_type CharT
string_type std:: basic_string < CharT >

Члены данных

Участник Описание
std::locale::id id [static] идентификатор аспекта

Функции-члены

создает новый numpunct фасет
(публичная функция-член)
уничтожает numpunct фасет
(защищенная функция-член)
вызывает do_decimal_point
(публичная функция-член)
вызывает do_thousands_sep
(публичная функция-член)
вызывает do_grouping
(публичная функция-член)
вызывает do_truename или do_falsename
(публичная функция-член)

Защищенные функции-члены

предоставляет символ для использования в качестве десятичной точки
(виртуальная защищенная функция-член)
предоставляет символ для использования в качестве разделителя тысяч
(виртуальная защищенная функция-член)
[virtual]
предоставляет количество цифр между каждой парой разделителей тысяч
(виртуальная защищенная функция-член)
предоставляет строку для использования в качестве имени булевых значений true и false
(виртуальная защищенная функция-член)

Пример

Следующий пример изменяет строковые представления 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 Applied to Behavior as published Correct behavior
LWG 338 C++98 токен sign допускал необязательный пробел после + или - удалён пробел

Смотрите также

создает аспект numpunct для указанной локали
(шаблон класса)