std::num_put::put, std::num_put::do_put
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Преобразование происходит в четыре этапа
Оригинал:
Conversion occurs in four stages
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этап 1: спецификатор преобразования выбор
- I / O флагов формата получаются, как быОригинал:I/O format flags are obtained, as if byТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
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 ofvisboolТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Если
boolalpha == 0, затем преобразуетvввестиintи выполняет целый выходной.Оригинал:* Ifboolalpha == 0, then convertsvto typeintand performs integer output.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Если
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.Оригинал:* Ifboolalpha != 0obtainsstd::use_facet<std::numpunct<charT>>(str.getloc()).truename()ifv == trueorstd::use_facet<std::numpunct<charT>>(str.getloc()).falsename()ifv == false, and outputs each successive charactercof that string tooutwith*out++ = c. No further processing is done in this case, the function returnsout.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vцелое типа, первый применимо выбор из следующих пяти выбранаОригинал:If the type ofvis an integer type, the the first applicable choice of the following five is selected:Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Если
basefield == oct, будет использовать спецификатор преобразования%oОригинал:Ifbasefield == oct, will use conversion specifier%oТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
basefield == hex && !uppercase, будет использовать спецификатор преобразования%xОригинал:Ifbasefield == hex && !uppercase, will use conversion specifier%xТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
basefield == hex, будет использовать спецификатор преобразования%XОригинал:Ifbasefield == hex, will use conversion specifier%XТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vбудет подписан, будем использовать спецификатор преобразования%dОригинал:If the type ofvis signed, will use conversion specifier%dТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vне подписан, будем использовать спецификатор преобразования%uОригинал:If the type ofvis unsigned, will use conversion specifier%uТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Для целых типов, длина модификатора добавляется в спецификации преобразования, если это необходимо:
lдляlongиunsigned long,llдляlong longиunsigned long long.Оригинал:For integer types, length modifier is added to the conversion specification if necessary:lforlongandunsigned long,llforlong longandunsigned long long.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vс плавающей точкой типа, первый применимо выбор из следующих пяти выбранаОригинал:If the type ofvis a floating-point type, the the first applicable choice of the following five is selected:Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Если
floatfield == std::ios_base::fixed, будет использовать спецификатор преобразования%fОригинал:Iffloatfield == std::ios_base::fixed, will use conversion specifier%fТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
floatfield == std::ios_base::scientific && !uppercase, будет использовать спецификатор преобразования%eОригинал:Iffloatfield == std::ios_base::scientific && !uppercase, will use conversion specifier%eТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
floatfield == std::ios_base::scientific, будет использовать спецификатор преобразования%EОригинал:Iffloatfield == std::ios_base::scientific, will use conversion specifier%EТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
floatfield == (std::ios_base::fixed | std::ios_base::scientific) && !uppercase, будет использовать спецификатор преобразования%a(начиная с C++11)Оригинал:Iffloatfield == (std::ios_base::fixed | std::ios_base::scientific) && !uppercase, will use conversion specifier%a(начиная с C++11)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
floatfield == std::ios_base::fixed | std::ios_base::scientific, будет использовать спецификатор преобразования%A(начиная с C++11)Оригинал:Iffloatfield == std::ios_base::fixed | std::ios_base::scientific, will use conversion specifier%A(начиная с C++11)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
!uppercase, будет использовать спецификатор преобразования%gОригинал:If!uppercase, will use conversion specifier%gТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - В противном случае будет использовать спецификатор преобразования
%GОригинал:otherwise, will use conversion specifier%GТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- * Если тип
vявляетсяlong double,Lмодификатор добавляют в спецификатор преобразования.Оригинал:* If the type ofvislong double, the length modifierLis added to the conversion specifier.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Кроме того, если
floatfield != (ios_base::fixed | ios_base::scientific), то точность модификатор добавил, установлен вstr.precision()Оригинал:* Additionally, iffloatfield != (ios_base::fixed | ios_base::scientific), then precision modifier is added, set tostr.precision()Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Для обоих целыми и с плавающей точкой, если
showbaseустановлено, модификатор#присоединяется. Еслиshowposустановлено, модификатор+присоединяется.Оригинал:For both integer and floating-point types, ifshowbaseis set, the modifier#is prepended. Ifshowposis set, the modifier+is prepended.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vявляетсяvoid*, будет использовать спецификатор преобразования%pОригинал:If the type ofvisvoid*, will use conversion specifier%pТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Узкая строка символов создается как бы призыв к
std::printf(spec, v)в "C" локали, гдеspecявляется избранным спецификатор преобразования.Оригинал:A narrow character string is created as if by a call tostd::printf(spec, v)in the "C" locale, wherespecis the chosen conversion specifier.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этап 2: локалей преобразования
- Каждый персонаж
c, полученного на стадии 1, кроме десятичной точки'.', превращается вCharTпо телефонуstd::use_facet<std::ctype<CharT>>(str.getloc()).widen(c).Оригинал:Every charactercobtained in Stage 1, other than the decimal point'.', is converted toCharTby callingstd::use_facet<std::ctype<CharT>>(str.getloc()).widen(c).Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Для арифметических типов, характер разделителя тысяч, полученных от
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 fromstd::use_facet<std::numpunct<CharT>>(str.getloc()).thousands_sep(), is inserted into the sequence according to the grouping rules provided bystd::use_facet<std::numpunct<CharT>>(str.getloc()).grouping()Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Десятичные символы точки (
'.') заменены наstd::use_facet<std::numpunct<CharT>>(str.getloc()).decimal_point()Оригинал:Decimal point characters ('.') are replaced bystd::use_facet<std::numpunct<CharT>>(str.getloc()).decimal_point()Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этап 3: заполнение
- Регулировка флаг получается как бы
std::fmtflags adjustfield = (flags & (std::ios_base::adjustfield))и рассмотрены с целью определить местоположение обивка, следующим образомОригинал:The adjustment flag is obtained as if bystd::fmtflags adjustfield = (flags & (std::ios_base::adjustfield))and examined to identify padding location, as followsТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Если
adjustfield == std::ios_base::left, будет площадке послеОригинал:Ifadjustfield == std::ios_base::left, will pad afterТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
adjustfield == std::ios_base::right, будет площадке передОригинал:Ifadjustfield == std::ios_base::right, will pad beforeТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
adjustfield == std::ios_base::internalи символ знака входит в представление, воля площадку после знакаОригинал:Ifadjustfield == std::ios_base::internaland a sign character occurs in the representation, will pad after the signТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
adjustfield == std::ios_base::internalи Stage 1 Представление началось с 0x или 0X, будет площадке после х или XОригинал:Ifadjustfield == std::ios_base::internaland Stage 1 representation began with 0x or 0X, will pad after the x or XТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - В противном случае будет площадке передОригинал:otherwise, will pad beforeТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Если
str.width()отличен от нуля (например, std::setw был просто использовали), и количество диаграмм после Этап 2 меньше, чемstr.width(), то копииfillхарактер вставляются в положение, указанное обивка довести длину последовательностиstr.width().Оригинал:Ifstr.width()is non-zero (e.g. std::setw was just used) and the number of CharT's after Stage 2 is less thanstr.width(), then copies of thefillcharacter are inserted at the position indicated by padding to bring the length of the sequence tostr.width().Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этап 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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Параметры
| out | — | итератор, указывающий на первый символ, который будет перезаписана
Оригинал: iterator pointing to the first character to be overwritten Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| str | — | поток, чтобы получить информацию о форматировании из
Оригинал: stream to retrieve the formatting information from Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| fill | — | обивка символ, используемый, когда результаты должны быть дополнены до ширины поля
Оригинал: padding character used when the results needs to be padded to the field width Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| v | — | значение для преобразования в строку и выход
Оригинал: value to convert to string and output Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Возвращаемое значение
out
Заметки
Нулем порожденных спецификации преобразования
#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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Пример
Вывести номер с помощью глобального стандарта
Оригинал:
Output a number using global locale
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Запустить этот код
#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См. также
вставляет форматированные данные в поток вывода std::basic_ostream (public функция-элемент std::basic_ostream)
|