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().short, потенциально пропуская предшествующие пробелы. Значение сохраняется в заданной ссылке 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.
int, потенциально пропуская предшествующие пробелы. Значение сохраняется в заданной ссылке 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равно long double.
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. Извлечение останавливается, если выполняется одно из следующих условий: - достижение конца файла в последовательности ввода;
- произошел сбой при записи в последовательность вывода (в этом случае символ для записи не извлекается);
- произошла ошибка (в этом случае ошибка обрабатывается, а перебрасывается только если не было записано ни одного символа и
failbitвключено вexceptions()).
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.
Параметры
| value | - | ссылка на целое или с плавающей точкой значение для хранения извлеченного значения |
| func | - | указатель на функцию манипулятора ввода-вывода |
| 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 | извлекается значение long вместо short или int |
| LWG 413 | C++98 | перегрузка (18) перебрасывала только исключения, выброшенные во время извлечения символов из sb, но символы извлекаются из *this | исправлено sb на *this |
| LWG 567 | C++98 | перегрузка (18) вела себя как FormattedInputFunction из-за разрешения LWG issue 60 | она ведет себя как UnformattedInputFunction |
| LWG 661 | C++98 | перегрузки (12,13) не сохраняли извлечённое число в value из-за разрешения LWG issue 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/w/cpp/io/basic_istream/operator_gtgt