Spec-Zone.ru › C++

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)

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

1-11) Извлекает значение, потенциально пропуская предшествующие пробелы. Значение сохраняется в заданной ссылке value.
Эта функция ведет себя как FormattedInputFunction. После создания и проверки объекта-сторожа, который может пропускать начальные пробелы, извлекает значение, вызывая std::num_get::get().
12) Извлекает значение типа short, потенциально пропуская предшествующие пробелы. Значение сохраняется в заданной ссылке value.
Эта функция ведет себя как FormattedInputFunction. После создания и проверки объекта-сторожа, который может пропускать начальные пробелы, извлекает значение типа long 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.
13) Извлекает значение типа int, потенциально пропуская предшествующие пробелы. Значение сохраняется в заданной ссылке value.
Эта функция ведет себя как FormattedInputFunction. После создания и проверки объекта-сторожа, который может пропускать начальные пробелы, извлекает значение типа long 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.
14) Извлекает расширенное значение с плавающей точкой, потенциально пропуская предшествующие пробелы. Значение сохраняется в заданной ссылке value. Библиотека предоставляет перегрузки для всех типов расширенных чисел с плавающей точкой без модификаторов cv, как тип ссылки параметра 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 оставалось без изменений при ошибке извлечения устанавливается в ноль или минимальные/
максимальные значения

См. также

operator>>(std::basic_istream)
извлекает символы и массивы символов
(шаблон функции)
operator<<operator>>
выполняет ввод и вывод потоков в строки
(шаблон функции)
operator<<operator>>
выполняет ввод и вывод потоков битовых наборов
(шаблон функции)
operator<<operator>>
сериализует и десериализует комплексное число
(шаблон функции)
operator<<operator>>
(C++11)
выполняет ввод и вывод потоков псевдослучайного генератора чисел
(шаблон функции)
operator<<operator>>
(C++11)
выполняет ввод и вывод потоков псевдослучайного распределения чисел
(шаблон функции)
read
извлекает блоки символов
(публичный член-функция)
readsome
извлекает уже доступные блоки символов
(публичный член-функция)
get
извлекает символы
(публичный член-функция)
getline
извлекает символы до тех пор, пока не будет найден указанный символ
(публичный член-функция)
from_chars
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API