Пространства имён
Варианты
Действия

std::num_put::put, std::num_put::do_put

Материал из cppreference.com
< cpp‎ | locale‎ | num put

 
 
Локализация
Локализации и фасеты
locale
Классификация символов
Преобразования
Базовые классы фасетов
Категории фасетов
Зависящие от локализации категории фасетов
Не зависящие от локализации фасеты преобразования unicode
codecvt_utf8(C++11)
codecvt_utf16(C++11)
Локализации С
 
std::num_put
Член функций
Оригинал:
Member functions
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
num_put::num_put
num_put::~num_put
num_put::put
num_put::do_put
 
Определено в заголовочном файле <locale>
public:

iter_type put( iter_type out, std::ios_base& str, char_type fill, bool v) const;
iter_type put( iter_type out, std::ios_base& str, char_type fill, long v) const;
iter_type put( iter_type out, std::ios_base& str, char_type fill, long long v) const;
iter_type put( iter_type out, std::ios_base& str, char_type fill, unsigned long v) const;
iter_type put( iter_type out, std::ios_base& str, char_type fill, unsigned long long v) const;
iter_type put( iter_type out, std::ios_base& str, char_type fill, double v) const;
iter_type put( iter_type out, std::ios_base& str, char_type fill, long double v) const;

iter_type put( iter_type out, std::ios_base& str, char_type fill, const void* v) const;
(1)
protected:

iter_type do_put( iter_type out, std::ios_base& str, char_type fill, bool v) const;
iter_type do_put( iter_type out, std::ios_base& str, char_type fill, long v) const;
iter_type do_put( iter_type out, std::ios_base& str, char_type fill, long long v) const;
iter_type do_put( iter_type out, std::ios_base& str, char_type fill, unsigned long) const;
iter_type do_put( iter_type out, std::ios_base& str, char_type fill, unsigned long long) const;
iter_type do_put( iter_type out, std::ios_base& str, char_type fill, double v) const;
iter_type do_put( iter_type out, std::ios_base& str, char_type fill, long double v) const;

iter_type do_put( iter_type out, std::ios_base& str, char_type fill, const void* v) const;
(2)
1)
общественные функции-члена, вызывает защищенных виртуальных do_put функции-члена из самых производного класса.
Оригинал:
public member function, calls the protected virtual member function do_put of the most derived class.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
2)
пишет символов out выходной последовательности, которые представляют значение v, отформатированные в соответствии с просьбой форматирования флаги str.flags() и std::numpunct и std::ctype аспекты языка проникнут в потоке str. Эта функция вызывается для всех форматированный вывод потока операторы, такие как std::cout << n;.
Оригинал:
writes characters to the output sequence out which represent the value of v, formatted as requested by the formatting flags str.flags() and the std::numpunct and std::ctype facets of the locale imbued in the stream str. This function is called by all formatted output stream operators, such as std::cout << n;.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Преобразование происходит в четыре этапа
Оригинал:
Conversion occurs in four stages
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Содержание

[править] Этап 1: спецификатор преобразования выбор

  • I / O флагов формата получаются, как бы
    Оригинал:
    I/O format flags are obtained, as if by
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
fmtflags basefield = (str.flags() & std::ios_base::basefield);
fmtflags uppercase = (str.flags() & std::ios_base::uppercase);
fmtflags floatfield = (str.flags() & std::ios_base::floatfield);
fmtflags showpos = (str.flags() & std::ios_base::showpos);
fmtflags showbase = (str.flags() & std::ios_base::showbase);
  • Если тип v является bool
    Оригинал:
    If the type of v is bool
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • * Если boolalpha == 0, затем преобразует v ввести int и выполняет целый выходной.
    Оригинал:
    * If boolalpha == 0, then converts v to type int and performs integer output.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • * Если boolalpha != 0 получает std::use_facet<std::numpunct<charT>>(str.getloc()).truename() если v == true или std::use_facet<std::numpunct<charT>>(str.getloc()).falsename() если v == false, и выводит каждый последующий c характер, что строка out с *out++ = c. Нет дальнейшая обработка осуществляется в этом случае, функция возвращает out.
    Оригинал:
    * If boolalpha != 0 obtains std::use_facet<std::numpunct<charT>>(str.getloc()).truename() if v == true or std::use_facet<std::numpunct<charT>>(str.getloc()).falsename() if v == false, and outputs each successive character c of that string to out with *out++ = c. No further processing is done in this case, the function returns out.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если тип v целое типа, первый применимо выбор из следующих пяти выбрана
    Оригинал:
    If the type of v is an integer type, the the first applicable choice of the following five is selected:
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если basefield == oct, будет использовать спецификатор преобразования %o
Оригинал:
If basefield == oct, will use conversion specifier %o
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если basefield == hex && !uppercase, будет использовать спецификатор преобразования %x
Оригинал:
If basefield == hex && !uppercase, will use conversion specifier %x
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если basefield == hex, будет использовать спецификатор преобразования %X
Оригинал:
If basefield == hex, will use conversion specifier %X
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если тип v будет подписан, будем использовать спецификатор преобразования %d
Оригинал:
If the type of v is signed, will use conversion specifier %d
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если тип v не подписан, будем использовать спецификатор преобразования %u
Оригинал:
If the type of v is unsigned, will use conversion specifier %u
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Для целых типов, длина модификатора добавляется в спецификации преобразования, если это необходимо: l для long и unsigned long, ll для long long и unsigned long long.
    Оригинал:
    For integer types, length modifier is added to the conversion specification if necessary: l for long and unsigned long, ll for long long and unsigned long long.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если тип v с плавающей точкой типа, первый применимо выбор из следующих пяти выбрана
    Оригинал:
    If the type of v is a floating-point type, the the first applicable choice of the following five is selected:
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если floatfield == std::ios_base::fixed, будет использовать спецификатор преобразования %f
Оригинал:
If floatfield == std::ios_base::fixed, will use conversion specifier %f
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если floatfield == std::ios_base::scientific && !uppercase, будет использовать спецификатор преобразования %e
Оригинал:
If floatfield == std::ios_base::scientific && !uppercase, will use conversion specifier %e
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если floatfield == std::ios_base::scientific, будет использовать спецификатор преобразования %E
Оригинал:
If floatfield == std::ios_base::scientific, will use conversion specifier %E
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если floatfield == (std::ios_base::fixed | std::ios_base::scientific) && !uppercase, будет использовать спецификатор преобразования %a (начиная с C++11)
Оригинал:
If floatfield == (std::ios_base::fixed | std::ios_base::scientific) && !uppercase, will use conversion specifier %a (начиная с C++11)
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если floatfield == std::ios_base::fixed | std::ios_base::scientific, будет использовать спецификатор преобразования %A (начиная с C++11)
Оригинал:
If floatfield == std::ios_base::fixed | std::ios_base::scientific, will use conversion specifier %A (начиная с C++11)
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если !uppercase, будет использовать спецификатор преобразования %g
Оригинал:
If !uppercase, will use conversion specifier %g
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
В противном случае будет использовать спецификатор преобразования %G
Оригинал:
otherwise, will use conversion specifier %G
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • * Если тип v является long double, L модификатор добавляют в спецификатор преобразования.
    Оригинал:
    * If the type of v is long double, the length modifier L is added to the conversion specifier.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • * Кроме того, если floatfield != (ios_base::fixed | ios_base::scientific), то точность модификатор добавил, установлен в str.precision()
    Оригинал:
    * Additionally, if floatfield != (ios_base::fixed | ios_base::scientific), then precision modifier is added, set to str.precision()
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Для обоих целыми и с плавающей точкой, если showbase установлено, модификатор # присоединяется. Если showpos установлено, модификатор + присоединяется.
    Оригинал:
    For both integer and floating-point types, if showbase is set, the modifier # is prepended. If showpos is set, the modifier + is prepended.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если тип v является void*, будет использовать спецификатор преобразования %p
    Оригинал:
    If the type of v is void*, will use conversion specifier %p
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Узкая строка символов создается как бы призыв к std::printf(spec, v) в "C" локали, где spec является избранным спецификатор преобразования.
    Оригинал:
    A narrow character string is created as if by a call to std::printf(spec, v) in the "C" locale, where spec is the chosen conversion specifier.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Этап 2: локалей преобразования

  • Каждый персонаж c, полученного на стадии 1, кроме десятичной точки '.', превращается в CharT по телефону std::use_facet<std::ctype<CharT>>(str.getloc()).widen(c).
    Оригинал:
    Every character c obtained in Stage 1, other than the decimal point '.', is converted to CharT by calling std::use_facet<std::ctype<CharT>>(str.getloc()).widen(c).
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Для арифметических типов, характер разделителя тысяч, полученных от std::use_facet<std::numpunct<CharT>>(str.getloc()).thousands_sep(), вставляется в последовательность в соответствии с группировкой правила, предусмотренные std::use_facet<std::numpunct<CharT>>(str.getloc()).grouping()
    Оригинал:
    For arithmetic types, the thousands separator character, obtained from std::use_facet<std::numpunct<CharT>>(str.getloc()).thousands_sep(), is inserted into the sequence according to the grouping rules provided by std::use_facet<std::numpunct<CharT>>(str.getloc()).grouping()
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Десятичные символы точки ('.') заменены на std::use_facet<std::numpunct<CharT>>(str.getloc()).decimal_point()
    Оригинал:
    Decimal point characters ('.') are replaced by std::use_facet<std::numpunct<CharT>>(str.getloc()).decimal_point()
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Этап 3: заполнение

  • Регулировка флаг получается как бы std::fmtflags adjustfield = (flags & (std::ios_base::adjustfield)) и рассмотрены с целью определить местоположение обивка, следующим образом
    Оригинал:
    The adjustment flag is obtained as if by std::fmtflags adjustfield = (flags & (std::ios_base::adjustfield)) and examined to identify padding location, as follows
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если adjustfield == std::ios_base::left, будет площадке после
Оригинал:
If adjustfield == std::ios_base::left, will pad after
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если adjustfield == std::ios_base::right, будет площадке перед
Оригинал:
If adjustfield == std::ios_base::right, will pad before
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если adjustfield == std::ios_base::internal и символ знака входит в представление, воля площадку после знака
Оригинал:
If adjustfield == std::ios_base::internal and a sign character occurs in the representation, will pad after the sign
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если adjustfield == std::ios_base::internal и Stage 1 Представление началось с 0x или 0X, будет площадке после х или X
Оригинал:
If adjustfield == std::ios_base::internal and Stage 1 representation began with 0x or 0X, will pad after the x or X
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
В противном случае будет площадке перед
Оригинал:
otherwise, will pad before
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если str.width() отличен от нуля (например, std::setw был просто использовали), и количество диаграмм после Этап 2 меньше, чем str.width(), то копии fill характер вставляются в положение, указанное обивка довести длину последовательности str.width().
    Оригинал:
    If str.width() is non-zero (e.g. std::setw was just used) and the number of CharT's after Stage 2 is less than str.width(), then copies of the fill character are inserted at the position indicated by padding to bring the length of the sequence to str.width().
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Этап 4: выход

Каждый последующий c персонаж из последовательности диаграммы с 3 этап выводится как бы *out++ = c.
Оригинал:
Every successive character c from the sequence of CharT's from Stage 3 is output as if by *out++ = c.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Параметры

out -
итератор, указывающий на первый символ, который будет перезаписана
Оригинал:
iterator pointing to the first character to be overwritten
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
str -
поток, чтобы получить информацию о форматировании из
Оригинал:
stream to retrieve the formatting information from
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
fill -
обивка символ, используемый, когда результаты должны быть дополнены до ширины поля
Оригинал:
padding character used when the results needs to be padded to the field width
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
v -
значение для преобразования в строку и выход
Оригинал:
value to convert to string and output
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Возвращаемое значение

out

[править] Notes

Нулем порожденных спецификации преобразования #o (в результате сочетания std::showbase и std::oct например) не учитывается в качестве заполняющего символа.
Оригинал:
The leading zero generated by the conversion specification #o (resulting from the combination of std::showbase and std::oct for example) is not counted as a padding character.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Пример

Вывести номер с помощью глобального стандарта
Оригинал:
Output a number using global locale
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

#include <iostream>
#include <locale>
 
int main()
{
    auto &facet = std::use_facet<std::num_put<char>>(std::locale());
    facet.put(std::cout, std::cout, '0', 2.71);
    std::cout << '\n';
}

Вывод:

2,71

[править] См. также

вставками отформатированные данные
Оригинал:
inserts formatted data
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член std::basic_ostream) [edit]