Spec-Zone.ru › C++

std::numpunct

Определено в заголовке <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/facetstd-numpunct-inheritance.svg

Схема наследования

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

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

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

Типы членов

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

Члены-функции

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

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

do_decimal_point
[virtual]
предоставляет символ для использования в качестве десятичного разделителя
(виртуальная защищенная функция-член)
do_thousands_sep
[virtual]
предоставляет символ для использования в качестве разделителя тысяч
(виртуальная защищенная функция-член)
do_grouping
[virtual]
предоставляет количество цифр между каждой парой разделителей тысяч
(виртуальная защищенная функция-член)
do_truenamedo_falsename
[virtual]
предоставляет строку для использования в качестве имени булевых значений 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_byname
создает фасет numpunct для заданной локали
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/locale/numpunct

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API