Каждая функция форматированного ввода начинает выполнение с создания объекта класса sentry с noskipws (вторым) аргументом false. Если sentry объект возвращается trueпри преобразовании в значение типа bool, функция пытается получить запрошенный ввод. Если во время ввода возникает исключение, то ios::badbit он включается307 в *thisсостоянии ошибки. Если (exceptions()&badbit) != 0 тогда исключение генерируется повторно. В любом случае функция форматированного ввода уничтожает sentry объект. Если исключение не было создано, оно возвращается *this.
Это делается без ios::failure броска.
operator>>(unsigned short& val);
operator>>(unsigned int& val);
operator>>(long& val);
operator>>(unsigned long& val);
operator>>(long long& val);
operator>>(unsigned long long& val);
operator>>(float& val);
operator>>(double& val);
operator>>(long double& val);
operator>>(bool& val);
operator>>(void*& val);
Как и в случае со средствами вставки, эти экстракторы зависят отnum_get<> объекта локали для выполнения синтаксического анализа данных входного потока. Эти экстракторы действуют как функции форматированного ввода (как описано в разделе[istream.formatted.reqmts]). После создания объекта-часового преобразование происходит так, как если бы оно выполнялось следующим фрагментом кода:
using numget = num_get<charT, istreambuf_iterator<charT, traits>>; iostate err = iostate::goodbit; use_facet<numget>(loc).get(*this, 0, *this, err, val); setstate(err);
В приведенном выше фрагменте loc это закрытый член basic_ios класса. [ Note: Первый аргумент предоставляет объект istreambuf_iterator класса, который является итератором, указывающим на входной поток. Он обходит istreams и напрямую использует streambufs. ] Класс полагается на этот тип как на свой интерфейс , поэтому нет необходимости напрямую зависеть от него . — end note localeistreamistream
operator>>(short& val);
Преобразование происходит так, как если бы оно было выполнено следующим фрагментом кода (с использованием тех же обозначений, что и для предыдущего фрагмента кода):
using numget = num_get<charT, istreambuf_iterator<charT, traits>>; iostate err = ios_base::goodbit; long lval; use_facet<numget>(loc).get(*this, 0, *this, err, lval); if (lval < numeric_limits<short>::min()) { err |= ios_base::failbit; val = numeric_limits<short>::min(); } else if (numeric_limits<short>::max() < lval) { err |= ios_base::failbit; val = numeric_limits<short>::max(); } else val = static_cast<short>(lval); setstate(err);
operator>>(int& val);
Преобразование происходит так, как если бы оно было выполнено следующим фрагментом кода (с использованием тех же обозначений, что и для предыдущего фрагмента кода):
using numget = num_get<charT, istreambuf_iterator<charT, traits>>; iostate err = ios_base::goodbit; long lval; use_facet<numget>(loc).get(*this, 0, *this, err, lval); if (lval < numeric_limits<int>::min()) { err |= ios_base::failbit; val = numeric_limits<int>::min(); } else if (numeric_limits<int>::max() < lval) { err |= ios_base::failbit; val = numeric_limits<int>::max(); } else val = static_cast<int>(lval); setstate(err);
basic_istream<charT, traits>&
operator>>(basic_istream<charT, traits>& (*pf)(basic_istream<charT, traits>&));
Effects: Никто. Этот экстрактор не ведет себя как функция форматированного ввода (как описано в[istream.formatted.reqmts]).
basic_istream<charT, traits>&
operator>>(basic_ios<charT, traits>& (*pf)(basic_ios<charT, traits>&));
Effects: Звонки pf(*this). Этот экстрактор не ведет себя как функция форматированного ввода (как описано в[istream.formatted.reqmts]).
basic_istream<charT, traits>& operator>>(ios_base& (*pf)(ios_base&));
Effects: Звонки pf(*this).309 Этот экстрактор не ведет себя как функция форматированного ввода (как описано в[istream.formatted.reqmts]).
template<class charT, class traits>
basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>& in, charT* s);
template<class traits>
basic_istream<char, traits>& operator>>(basic_istream<char, traits>& in, unsigned char* s);
template<class traits>
basic_istream<char, traits>& operator>>(basic_istream<char, traits>& in, signed char* s);
Effects: Ведет себя как отформатированный входной член (как описано в[istream.formatted.reqmts]) ofin. После создания sentry объекта operator>> извлекает символы и сохраняет их в последовательных местах массива, первый элемент которого обозначен знаком s. Если width() больше нуля, тоn есть width(). В противном случаеn - это количество элементов самого большого массива, в char_type котором может храниться завершение charT(). n - максимальное количество хранимых символов.
operator>> затем сохраняет нулевой байт (charT()) в следующей позиции, которая может быть первой позицией, если символы не были извлечены. operator>> потом звонит width(0).
Если функция не извлекла никаких символов, она вызывает setstate(failbit), что может вызвать throw ios_base::failure ([iostate.flags]).
template<class charT, class traits>
basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>& in, charT& c);
template<class traits>
basic_istream<char, traits>& operator>>(basic_istream<char, traits>& in, unsigned char& c);
template<class traits>
basic_istream<char, traits>& operator>>(basic_istream<char, traits>& in, signed char& c);
Effects: Ведет себя как отформатированный входной член (как описано в[istream.formatted.reqmts]) ofin. После создания sentry объекта из него извлекается символin, если он доступен, и сохраняется вc. В противном случае функция вызывает in.setstate(failbit).
basic_istream<charT, traits>& operator>>(basic_streambuf<charT, traits>* sb);
Effects: Ведет себя какunformatted input function. Еслиsb равно нулю, вызывает setstate(failbit), который может throw ios_base::failure ([iostate.flags]). После того, как часовой объект построен, извлекает символы из *this и вставляет их в выходную последовательность, управляемуюsb. Символы извлекаются и вставляются до тех пор, пока не произойдет одно из следующих событий:
конец файла встречается во входной последовательности;
вставка в выходную последовательность не выполняется (в этом случае вставляемый символ не извлекается);
возникает исключение (в этом случае исключение перехватывается).
Если функция не вставляет символы, она вызывает setstate(failbit), что может вызвать throw ios_base::failure ([iostate.flags]). Если он не вставил никаких символов, потому что он поймал исключение, созданное при извлечении символов из *this и включеноfailbit в exceptions() ([iostate.flags]), то пойманное исключение генерируется повторно.
См., Например, сигнатуру функции ws(basic_istream&).
См., Например, сигнатуру функции dec(ios_base&).