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

std::num_get::get, std::num_get::do_get

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

 
 
Локализация
Локализации и фасеты
locale
Классификация символов
Преобразования
Базовые классы фасетов
Категории фасетов
Зависящие от локализации категории фасетов
Не зависящие от локализации фасеты преобразования unicode
codecvt_utf8(C++11)
codecvt_utf16(C++11)
Локализации С
 
std::num_get
Член функций
Оригинал:
Member functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
num_get::num_get
num_get::~num_get
num_get::get
num_get::do_get
 
Определено в заголовочном файле <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 of v is an integer type, the the first applicable choice of the following five is selected:
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если basefield == oct, будет использовать спецификатор преобразования %o
Оригинал:
If basefield == oct, will use conversion specifier %o
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если basefield == hex, будет использовать спецификатор преобразования %X
Оригинал:
If basefield == hex, will use conversion specifier %X
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если basefield == 0, будет использовать спецификатор преобразования %i
Оригинал:
If basefield == 0, will use conversion specifier %i
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если тип v будет подписан, будем использовать спецификатор преобразования %d
Оригинал:
If the type of v is signed, will use conversion specifier %d
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если тип v не подписан, будем использовать спецификатор преобразования %u
Оригинал:
If the type of v is 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: h for short and unsigned short, l for long and unsigned long, ll for long long and unsigned long long
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если тип v является float, будет использовать спецификатор преобразования %g
    Оригинал:
    If the type of v is float, will use conversion specifier %g
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если тип v является double, будет использовать спецификатор преобразования %lg
    Оригинал:
    If the type of v is double, will use conversion specifier %lg
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если тип v является long double, будет использовать спецификатор преобразования %Lg
    Оригинал:
    If the type of v is long double, will use conversion specifier %Lg
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если тип v является void*, будет использовать спецификатор преобразования %p
    Оригинал:
    If the type of v is void*, will use conversion specifier %p
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если тип v является bool и boolalpha==0, продолжается, как если бы тип v является long, за исключением значения будут храниться в v в стадии 3.
    Оригинал:
    If the type of v is bool and boolalpha==0, proceeds as if the type of v is long, except for the value to be stored in v in stage 3.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если тип v является bool и boolalpha!=0, заменяется следующей стадии 2 и 3
    Оригинал:
    If the type of v is bool and boolalpha!=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 iterator in are matched against the character sequences obtained from std::use_facet<std::numpunct<charT>>(str.getloc()).falsename() and std::use_facet<std::numpunct<charT> >(str.getloc()).truename() only as necessary as to identify the unique match. The input iterator in is compared to end only 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, v is set to the corresponding bool value. Otherwise false is stored in v and std::ios_base::failbit is assigned to err. If unique match could not be found before the input ended (in==end), err|=std::ios_base::eofbit is executed.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Этап 2: характер добычи

  • Если in==end, 2-я ступень немедленно прекращено, никаких дополнительных символов извлечены
    Оригинал:
    If in==end, Stage 2 is terminated immediately, no further characters are extracted
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Следующий символ извлекается из in как бы char_type ct = *in;
    Оригинал:
    The next character is extracted from in as if by char_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 by std::use_facet<std::ctype<charT>>(str.getloc()).widen(), it is converted to the corresponding char.
    Текст был переведён автоматически используя Переводчик 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 all std::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 the char obtained 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 of chars 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 integer v, std::strtoull for unsigned integer v, or std::strtold for floating-point v (начиная с C++11)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если функция преобразования не удается конвертировать все поле, значение 0 хранится в v (начиная с C++11)
    Оригинал:
    If the conversion function fails to convert the entire field, the value 0 is stored in v (начиная с C++11)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если функция преобразования результатов в положительное значение слишком большим, чтобы поместиться в тип v, самые положительные представимо значение хранится в v (начиная с C++11)
    Оригинал:
    If the conversion function results in a positive value too large to fit in the type of v, the most positive representable value is stored in v (начиная с C++11)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если функция преобразования результатов в отрицательное значение слишком большим, чтобы поместиться в тип v, самым негативным представимо значение хранится в v (начиная с C++11)
    Оригинал:
    If the conversion function results in a negative value too large to fit in the type of v, the most negative representable value is stored in v (начиная с C++11)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • В любом случае, если функция преобразования не удается std::ios_base::failbit назначен err
    Оригинал:
    In any case, if the conversion function fails std::ios_base::failbit is assigned to err
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • В противном случае, числовой результат преобразования сохраняется в v
    Оригинал:
    Otherwise, the numeric result of the conversion is stored in v
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • * Если тип v является bool и boolalpha не установлен, то, если значение, которое будет храниться является 0, false сохраняется, если значение, которое будет храниться является 1, true хранится, для любой другой std::ios_base::failbit присваивается значение err.
    Оригинал:
    * If the type of v is bool and boolalpha is not set, then if the value to be stored is 0, false is stored, if the value to be stored is 1, true is stored, for any other value std::ios_base::failbit is assigned to err.
    Текст был переведён автоматически используя Переводчик 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 by std::use_facet<std::numpunct<charT>>(str.getloc()).grouping(), std::ios_base::failbit is assigned to err.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если Stage 2 была прекращена с помощью теста in==end, err|=std::ios_base::eofbit выполнен установить EOF немного.
    Оригинал:
    If Stage 2 was terminated by the test in==end, err|=std::ios_base::eofbit is 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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

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

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

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