Namespaces
Variants

std::basic_istream<CharT,Traits>:: operator>>

From cppreference.net
**Примечание:** В данном фрагменте HTML не содержится переводимого текста - только HTML-теги, атрибуты и C++ код, которые согласно инструкциям не подлежат переводу. Весь представленный контент состоит из: - HTML-разметки (` `, `
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)
`, `
`, ` ` с классами) - C++ синтаксиса (`basic_istream`, `operator >>`, `func`, `&`, `*`, `;`) - Символов и скобок - Номера версии "(17)" Все эти элементы сохраняются в оригинальном виде без изменений.
basic_istream & operator >> ( std:: basic_streambuf < CharT, Traits > * sb ) ;
(18)

Извлекает значения из входного потока.

1-11) Извлекает значение, потенциально пропуская предшествующие пробельные символы. Значение сохраняется в заданную ссылку value .
Эта функция ведет себя как FormattedInputFunction . После создания и проверки сторожевого объекта, который может пропускать ведущие пробельные символы, извлекает значение путем вызова std::num_get::get() .
12) Извлекает значение short с возможным пропуском предшествующих пробельных символов. Значение сохраняется в заданную ссылку value .
Эта функция ведет себя как FormattedInputFunction . После создания и проверки сторожевого объекта, который может пропускать ведущие пробелы, извлекает значение long lval путем вызова std::num_get::get() . После этого:
13) Извлекает значение int с возможным пропуском предшествующих пробельных символов. Значение сохраняется в переданную по ссылке переменную value .
Эта функция ведет себя как FormattedInputFunction . После создания и проверки сторожевого объекта, который может пропускать ведущие пробельные символы, извлекает значение long lval путем вызова std::num_get::get() . После этого:
14) Извлекает расширенное значение с плавающей точкой, потенциально пропуская предшествующие пробельные символы. Значение сохраняется в заданную ссылку value . Библиотека предоставляет перегрузки для всех cv-неквалифицированных extended floating-point types в качестве ссылочного типа параметра value .
Определяет стандартный тип с плавающей точкой FP следующим образом:
  • Если ранг преобразования с плавающей точкой для /* extended-floating-point-type */ меньше или равен рангу для float , то FP является float .
  • Иначе, если ранг преобразования с плавающей точкой для /* extended-floating-point-type */ меньше или равен рангу для double , то FP является double .
  • Иначе, FP является long double .
Эта функция ведет себя как FormattedInputFunction . После создания и проверки сторожевого объекта, который может пропускать ведущие пробелы, извлекает значение 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 .
15-17) Вызывает func ( * this ) , где func является манипулятором ввода-вывода.
18) Ведет себя как UnformattedInputFunction . После создания и проверки сторожевого объекта извлекает все данные из * 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 - указатель на буфер потока для записи всех данных

Возвращаемое значение

1-16,18) * this
17) 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++17)
преобразует последовательность символов в целочисленное или вещественное значение
(функция)