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'
Диаграмма наследования
Специализации
Стандартная библиотека гарантированно предоставляет следующие специализации (они должны быть реализованы любым объектом локали):
Определён в заголовочном файле <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] | возвращает символ, используемый в качестве десятичного разделителя (виртуальная защищённая функция-член) |
|
[virtual] | возвращает символ, используемый в качестве разделителя тысяч (виртуальная защищённая функция-член) |
|
[virtual] | возвращает количество цифр между каждой парой разделителей тысяч (виртуальная защищённая функция-член) |
|
[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++.
| Отчёт об ошибке | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 338 | C++98 | токен sign допускал необязательный пробел после + или - | пробел удалён |
См. также
| создаёт фасет numpunct для именованной локали (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/numpunct