std::num_get::get, std::num_get::do_get
Материал из cppreference.com
(перенаправлено с «cpp/locale/num get/do get»)
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <locale>
|
||
public: iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, bool& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, long& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, long long& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned short& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned int& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned long& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned long long& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, float& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, double& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, long double& v ); iter_type get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, void*& v ); |
(1) | |
protected: iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, bool& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, long& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, long long& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned short& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned int& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned long& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned long long& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, float& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, double& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, long double& v ); iter_type do_get( iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, void*& v ); |
(2) | |
1)
общественные функции-члена, вызывает
do_get функции-члена из самых производного класса.Оригинал:
public member function, calls the member function
do_get of the most derived class.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
2)
читает символы из
in итератор входного и генерирует значения типа v, принимая во внимание флаги IO поток форматирования str.flags(), правила классификации символов из std::use_facet<std::ctype<charT>>(str.getloc()), и числовые знаки препинания из std::use_facet<std::numpunct<charT>>(str.getloc()). Эта функция вызывается все форматированные входного потока операторы, такие как std::cin >> n;.Оригинал:
reads characters from the input iterator
in and generates the value of the type of v, taking into account IO stream formatting flags from str.flags(), character classification rules from std::use_facet<std::ctype<charT>>(str.getloc()), and numeric punctuation characters from std::use_facet<std::numpunct<charT>>(str.getloc()). This function is called by all formatted input stream operators such as std::cin >> n;.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Преобразование происходит в три этапа
Оригинал:
Conversion occurs in three stages
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этап 1: спецификатор преобразования выбор
- I / O флагов формата получаются, как быОригинал:I/O format flags are obtained, as if byТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
fmtflags basefield = (str.flags() & std::ios_base::basefield);fmtflags boolalpha = (str.flags() & std::ios_base::boolalpha);
- Если тип
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, будет использовать спецификатор преобразования%XОригинал:Ifbasefield == hex, will use conversion specifier%XТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если
basefield == 0, будет использовать спецификатор преобразования%iОригинал:Ifbasefield == 0, will use conversion specifier%iТекст был переведён автоматически используя Переводчик 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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Для целых типов, длина модификатора добавляется в спецификации преобразования, если это необходимо:
hдляshortиunsigned short,lдляlongиunsigned long,llдляlong longиunsigned long longОригинал:For integer types, length modifier is added to the conversion specification if necessary:hforshortandunsigned short,lforlongandunsigned long,llforlong longandunsigned long longТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vявляетсяfloat, будет использовать спецификатор преобразования%gОригинал:If the type ofvisfloat, will use conversion specifier%gТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vявляетсяdouble, будет использовать спецификатор преобразования%lgОригинал:If the type ofvisdouble, will use conversion specifier%lgТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vявляетсяlong double, будет использовать спецификатор преобразования%LgОригинал:If the type ofvislong double, will use conversion specifier%LgТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vявляетсяvoid*, будет использовать спецификатор преобразования%pОригинал:If the type ofvisvoid*, will use conversion specifier%pТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vявляетсяboolиboolalpha==0, продолжается, как если бы типvявляетсяlong, за исключением значения будут храниться вvв стадии 3.Оригинал:If the type ofvisboolandboolalpha==0, proceeds as if the type ofvislong, except for the value to be stored invin stage 3.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если тип
vявляетсяboolиboolalpha!=0, заменяется следующей стадии 2 и 3Оригинал:If the type ofvisboolandboolalpha!=0, the following replaces stages 2 and 3:Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Последовательные символы получены от входной итератор
inсопоставляются с характером последовательностей, полученных изstd::use_facet<std::numpunct<charT>>(str.getloc()).falsename()иstd::use_facet<std::numpunct<charT> >(str.getloc()).truename()только по мере необходимости с целью выявления уникальных матч.inвходной итератор по сравнению сendтолько тогда, когда необходимо получить символ.Оригинал:* Successive characters obtained from the input iteratorinare matched against the character sequences obtained fromstd::use_facet<std::numpunct<charT>>(str.getloc()).falsename()andstd::use_facet<std::numpunct<charT> >(str.getloc()).truename()only as necessary as to identify the unique match. The input iteratorinis compared toendonly when necessary to obtain a character.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Если целевая последовательность однозначно совпадают,
vустанавливается в соответствующее значениеbool. В противном случаеfalseхранится вvи std::ios_base::failbit назначенerr. Если уникальный матч не может быть найден перед входом закончилась (in==end),err|=std::ios_base::eofbitвыполняется.Оригинал:* If the target sequence is uniquely matched,vis set to the correspondingboolvalue. Otherwisefalseis stored invand std::ios_base::failbit is assigned toerr. If unique match could not be found before the input ended (in==end),err|=std::ios_base::eofbitis executed.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этап 2: характер добычи
- Если
in==end, 2-я ступень немедленно прекращено, никаких дополнительных символов извлеченыОригинал:Ifin==end, Stage 2 is terminated immediately, no further characters are extractedТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Следующий символ извлекается из
inкак быchar_type ct = *in;Оригинал:The next character is extracted frominas if bychar_type ct = *in;Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Если символ совпадает с одним из
"0123456789abcdefxABCDEFX+-", расширился до char_type локали как быstd::use_facet<std::ctype<charT>>(str.getloc()).widen(), он преобразуется в соответствующееchar.Оригинал:* If the character matches one of"0123456789abcdefxABCDEFX+-", widened to the locale's char_type as if bystd::use_facet<std::ctype<charT>>(str.getloc()).widen(), it is converted to the correspondingchar.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Если символ совпадает десятичного разделителя точку (
std::use_facet<std::numpunct<charT>>(str.getloc()).decimal_point())), он заменяется'.'.Оригинал:* If the character matches the decimal point separator (std::use_facet<std::numpunct<charT>>(str.getloc()).decimal_point())), it is replaced by'.'.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Если символ, соответствующий разделитель тысяч (
std::use_facet<std::numpunct<charT>>(str.getloc()).thousands_sep()) и тысячи разделения используется на всехstd::use_facet<std::numpunct<charT>>(str.getloc()).grouping().length() != 0, то, если десятичная точка'.'еще не накоплен, позиция символа rememebered, но символа игнорируются. Если десятичная точка уже накоплен, символ игнорируется, а 2 этап завершается.Оригинал:* If the character matches the thousands separator (std::use_facet<std::numpunct<charT>>(str.getloc()).thousands_sep()) and the thousands separation is in use at allstd::use_facet<std::numpunct<charT>>(str.getloc()).grouping().length() != 0, then if the decimal point'.'has not yet been accumulated, the position of the character is rememebered, but the character is otherwise ignored. If the decimal point has already been accumulated, the character is discarded and Stage 2 terminates.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * В любом случае, проверка, является ли
charполучены из предыдущих шагов допускается в поле ввода, который будет проанализирован std::scanf данный спецификатор преобразования выбранных на этапе 1. Если это разрешено, оно накапливается во временный буфер и 2 этап повторяется. Если это не разрешено, 2 этап завершается.Оригинал:* In any case, the check is made whether thecharobtained from the previous steps is allowed in the input field that would be parsed by std::scanf given the conversion specifier selected in Stage 1. If it is allowed, it is accumulated in a temporary buffer and Stage 2 repeats. If it is not allowed, Stage 2 terminates.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этап 3: преобразование и хранение
- Последовательность
chars, накопленных в стадии 2 преобразуется в числовое значениеОригинал:The sequence ofchars accumulated in Stage 2 is converted to a numeric valueТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Входные анализируется как будто std::scanf с спецификатор преобразования выбранных на этапе 1 (до C++11)Оригинал:* The input is parsed as if by std::scanf with the conversion specifier selected in Stage 1 (до C++11)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Входные анализируется как будто std::strtoll для целого числа
v, std::strtoull для неподписанныхvцелое число, или std::strtold с плавающей точкойv(начиная с C++11)Оригинал:* The input is parsed as if by std::strtoll for signed integerv, std::strtoull for unsigned integerv, or std::strtold for floating-pointv(начиная с C++11)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если функция преобразования не удается конвертировать все поле, значение
0хранится вv(начиная с C++11)Оригинал:If the conversion function fails to convert the entire field, the value0is stored inv(начиная с C++11)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если функция преобразования результатов в положительное значение слишком большим, чтобы поместиться в тип
v, самые положительные представимо значение хранится вv(начиная с C++11)Оригинал:If the conversion function results in a positive value too large to fit in the type ofv, the most positive representable value is stored inv(начиная с C++11)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если функция преобразования результатов в отрицательное значение слишком большим, чтобы поместиться в тип
v, самым негативным представимо значение хранится вv(начиная с C++11)Оригинал:If the conversion function results in a negative value too large to fit in the type ofv, the most negative representable value is stored inv(начиная с C++11)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - В любом случае, если функция преобразования не удается std::ios_base::failbit назначен
errОригинал:In any case, if the conversion function fails std::ios_base::failbit is assigned toerrТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - В противном случае, числовой результат преобразования сохраняется в
vОригинал:Otherwise, the numeric result of the conversion is stored invТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - * Если тип
vявляетсяboolи boolalpha не установлен, то, если значение, которое будет храниться является0,falseсохраняется, если значение, которое будет храниться является1,trueхранится, для любой другой std::ios_base::failbit присваивается значениеerr.Оригинал:* If the type ofvisbooland boolalpha is not set, then if the value to be stored is0,falseis stored, if the value to be stored is1,trueis stored, for any other value std::ios_base::failbit is assigned toerr.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - После этого, цифра группировки проверяется. если положение любой из тысячи сепараторы отбрасывается на этапе 2 не совпадает с группировкой предоставляемых
std::use_facet<std::numpunct<charT>>(str.getloc()).grouping(), std::ios_base::failbit назначенerr.Оригинал:After this, digit grouping is checked. if the position of any of the thousands separators discarded in Stage 2 does not match the grouping provided bystd::use_facet<std::numpunct<charT>>(str.getloc()).grouping(), std::ios_base::failbit is assigned toerr.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - Если Stage 2 была прекращена с помощью теста
in==end,err|=std::ios_base::eofbitвыполнен установить EOF немного.Оригинал:If Stage 2 was terminated by the testin==end,err|=std::ios_base::eofbitis executed to set the eof bit.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Возвращаемое значение
in
Заметки
В C + +98 / C + +03, если происходит ошибка,
v остается неизменным. В C + +11, он установлен в значение, как описано выше.Оригинал:
In C++98/C++03, if an error occurs,
v is left unchanged. In C++11, it is set to a value as described above.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Пример
| Этот раздел не завершён Причина: нет примера |
См. также
извлекает форматированные данные из потока ввода std::basic_istream (public функция-элемент std::basic_istream)
|