std::basic_istream<CharT,Traits>::operator>>
basic_istream& operator>>( unsigned short& value ); | (1) | |
basic_istream& operator>>( unsigned int& value ); | (2) | |
basic_istream& operator>>( long& value ); | (3) | |
basic_istream& operator>>( unsigned long& value ); | (4) | |
basic_istream& operator>>( long long& value ); | (5) | (начиная с C++11) |
basic_istream& operator>>( unsigned long long& value ); | (6) | (начиная с C++11) |
basic_istream& operator>>( float& value ); | (7) | |
basic_istream& operator>>( double& value ); | (8) | |
basic_istream& operator>>( long double& value ); | (9) | |
basic_istream& operator>>( bool& value ); | (10) | |
basic_istream& operator>>( void*& value ); | (11) | |
basic_istream& operator>>( short& value ); | (12) | |
basic_istream& operator>>( int& value ); | (13) | |
basic_istream& operator>>( /* extended-floating-point-type */& value ); | (14) | (начиная с C++23) |
basic_istream& operator>>( std::ios_base& (*func)(std::ios_base&) ); | (15) | |
basic_istream& operator>>( std::basic_ios<CharT, Traits>&
(*func)(std::basic_ios<CharT, Traits>&) );
| (16) | |
basic_istream& operator>>( basic_istream& (*func)(basic_istream&) ); | (17) | |
basic_istream& operator>>( std::basic_streambuf<CharT, Traits>* sb ); | (18) |
Извлекает значения из входного потока.
value.std::num_get::get().value.lval, вызывая std::num_get::get(). После этого: - Если
lval < std::numeric_limits<short>::min(), устанавливаетfailbitи сохраняетstd::numeric_limits<short>::min()вval. - Иначе, если
std::numeric_limits<short>::max() < lval, устанавливаетfailbitи сохраняетstd::numeric_limits<short>::max()вval. - В противном случае сохраняет
static_cast<short>(lval)вval.
value.lval, вызывая std::num_get::get(). После этого: - Если
lval < std::numeric_limits<int>::min(), устанавливаетfailbitи сохраняетstd::numeric_limits<int>::min()вval. - Иначе, если
std::numeric_limits<int>::max() < lval, устанавливаетfailbitи сохраняетstd::numeric_limits<int>::max()вval. - В противном случае сохраняет
static_cast<int>(lval)вval.
value. Библиотека предоставляет перегрузки для всех расширенных типов с плавающей точкой без квалификаторов cv, используемых в качестве ссылочного типа параметра value.FP определяется следующим образом: - Если ранг преобразования типа с плавающей точкой для /* extended-floating-point-type */ меньше или равен рангу типа float, то
FP— это float. - Иначе, если ранг преобразования типа с плавающей точкой для /* extended-floating-point-type */ меньше или равен рангу типа double, то
FP— это double. - В противном случае
FP— это longdouble.
FP типа fval, вызывая std::num_get::get(). После этого: - Если
fval < -std::numeric_limits</* extended-floating-point-type */>::max(), устанавливаетfailbitи сохраняет-std::numeric_limits</* extended-floating-point-type */>::max()вval. - Иначе, если
std::numeric_limits</* extended-floating-point-type */>::max() < fval, устанавливаетfailbitи сохраняетstd::numeric_limits</* extended-floating-point-type */>::max()вval. - В противном случае сохраняет
static_cast</* extended-floating-point-type */>(fval)вval.
func(*this), где func — это манипулятор ввода-вывода.*this и сохраняет их в sb. Извлечение прекращается при выполнении одного из следующих условий: - входная последовательность достигает конца файла;
- вставка в выходную последовательность завершается неудачей (в этом случае вставляемый символ не извлекается);
- возникает исключение (в этом случае исключение перехватывается и повторно выбрасывается, только если ни одного символа не вставлено и в
exceptions()включёнfailbit).
gcount(). Если sb — нулевой указатель или в sb не вставлено ни одного символа, вызывает setstate(failbit) (которая может выбросить std::ios_base::failure, если это включено).Если извлечение завершается неудачей (например, если вместо цифры введена буква), в value записывается ноль и устанавливается failbit. Для знаковых целых чисел, если в результате извлечения получено значение, слишком большое или слишком маленькое для представления в value, записывается соответственно std::numeric_limits<T>::max() или std::numeric_limits<T>::min() и устанавливается флаг failbit. Для беззнаковых целых чисел, если в результате извлечения получено значение, слишком большое или слишком маленькое для представления в value, записывается std::numeric_limits<T>::max() и устанавливается флаг failbit.
Параметры
| значение | - | ссылка на целое число или значение с плавающей точкой, в которое сохраняется извлечённое значение |
| функция | - | указатель на функцию-манипулятор ввода-вывода |
| sb | - | указатель на буфер потока, в который записываются все данные |
Возвращаемое значение
*this
func(*this)
Примечания
Для перегрузки (14), если ранг преобразования расширенного типа с плавающей точкой не совпадает с рангом ни одного стандартного типа с плавающей точкой, двойное округление при преобразовании может привести к неточным результатам. В ситуациях, когда важна максимальная точность, можно использовать std::from_chars().
Пример
#include <iomanip>
#include <iostream>
#include <sstream>
int main()
{
std::string input = "41 3.14 false hello world";
std::istringstream stream(input);
int n;
double f;
bool b;
stream >> n >> f >> std::boolalpha >> b;
std::cout << "n = " << n << '\n'
<< "f = " << f << '\n'
<< "b = " << std::boolalpha << b << '\n';
// extract the rest using the streambuf overload
stream >> std::cout.rdbuf();
std::cout << '\n';
}
Вывод:
n = 41 f = 3.14 b = false hello world
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 64 | C++98 | было неясно, может ли перегрузка (18) повторно выбросить толькоstd::ios_base::failure, выброшенное при вызове setstate(failbit) | можно повторно выбросить все перехваченные исключения |
| LWG 118 | C++98 | перегрузки (12,13) делегировали извлечение функции num_get::get,у которой нет перегрузок для short и int | вместо значения типа short или int извлекается значение типа long |
| LWG 413 | C++98 | перегрузка (18) повторно выбрасывала только исключения, возникшие при извлечении символов из sb, однако символы извлекаются из *this | исправлено sb на *this |
| LWG 567 | C++98 | перегрузка (18) вела себя как функция форматированного ввода вследствие решения по вопросу LWG 60 | она ведёт себя как функция неформатированного ввода |
| LWG 661 | C++98 | перегрузки (12,13) не сохраняли извлечённое число в value вследствие решения по вопросу LWG 118 | сохраняют число, если переполнения не происходит |
| LWG 696 | C++98 |
value не изменялось при ошибке извлечения | устанавливается в ноль или минимальное/ максимальное значение |
См. также
| извлекает символы и массивы символов (шаблон функции) |
|
| выполняет ввод и вывод строк в поток (шаблон функции) |
|
| выполняет ввод и вывод битовых наборов в поток (шаблон функции) |
|
| сериализует и десериализует комплексное число (шаблон функции) |
|
|
(C++11) | выполняет ввод и вывод псевдослучайного генератора в поток (шаблон функции) |
|
(C++11) | выполняет ввод и вывод распределения псевдослучайных чисел в поток (шаблон функции) |
| извлекает блоки символов (открытая функция-член) |
|
| извлекает уже доступные блоки символов (открытая функция-член) |
|
| извлекает символы (открытая функция-член) |
|
| извлекает символы до обнаружения заданного символа (открытая функция-член) |
|
|
(C++17) | преобразует последовательность символов в целое число или значение с плавающей точкой (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/operator_gtgt