Spec-Zone.ru › C++

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

int_type get();
(1)
basic_istream& get( char_type& ch );
(2)
basic_istream& get( char_type* s, std::streamsize count );
(3)
basic_istream& get( char_type* s, std::streamsize count, char_type delim );
(4)
basic_istream& get( basic_streambuf& strbuf );
(5)
basic_istream& get( basic_streambuf& strbuf, char_type delim );
(6)

Извлекает символ или символы из потока.

Все версии ведут себя как UnformattedInputFunctions. После построения и проверки объекта-сторожевого объекта эти функции выполняют следующее:

1) Читает один символ и возвращает его, если он доступен. В противном случае возвращает Traits::eof() и устанавливает failbit и eofbit.
2) Читает один символ и сохраняет его в ch, если он доступен. В противном случае оставляет ch неизменным и устанавливает failbit и eofbit. Обратите внимание, что эта функция не перегружена по типам signed char и unsigned char, в отличие от формализованного оператора ввода символов >>.
3) То же самое, что и get(s, count, widen('\n')), то есть читает не более std::max(0, count - 1) символов и сохраняет их в строку символов, на которую указывает s, до тех пор, пока не будет найден '\n'.
4) Читает символы и сохраняет их в последовательных ячейках массива символов, на первый элемент которого указывает s. Символы извлекаются и сохраняются до тех пор, пока не произойдет одно из следующих событий:
  • count меньше 1 или count - 1 символов были сохранены.
  • возникает состояние конца файла в последовательности ввода (вызывается setstate(eofbit)).
  • следующий доступный символ ввода c равен delim, как определяется Traits::eq(c, delim). Этот символ не извлекается (в отличие от getline()).
В любом случае, если count > 0, символ null (CharT() сохраняется в следующей ячейке массива.
5) То же самое, что и get(strbuf, widen('\n')), то есть читает доступные символы и вставляет их в заданный объект basic_streambuf, до тех пор, пока не будет найден '\n'.
6) Читает символы и вставляет их в выходную последовательность, управляемую заданным объектом basic_streambuf. Символы извлекаются и вставляются в strbuf до тех пор, пока не произойдет одно из следующих событий:
  • возникает состояние конца файла в последовательности ввода.
  • вставка в выходную последовательность завершается неудачно (в этом случае символ, который не мог быть вставлен, не извлекается).
  • следующий доступный символ ввода c равен delim, как определяется Traits::eq(c, delim). Этот символ не извлекается.
  • происходит исключение (в этом случае исключение обрабатывается и не перебрасывается).

Если символы не были извлечены, вызывается setstate(failbit).

Все версии устанавливают значение gcount() в количество извлеченных символов.

Параметры

ch - ссылка на символ, в который нужно записать результат
s - указатель на строку символов для хранения символов
count - размер строки символов, на которую указывает s
delim - разделяющий символ для остановки извлечения. Он не извлекается и не сохраняется
strbuf - буфер потока для чтения содержимого

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

1) Извлеченный символ или Traits::eof().
2-6) *this

Исключения

failure если произошла ошибка (флаг состояния ошибки не goodbit) и exceptions() задано на переброс для этого состояния.

Если внутренняя операция вызывает исключение, оно перехватывается, и badbit устанавливается. Если exceptions() установлено для badbit, исключение перебрасывается.

Пример

#include <iostream>
#include <sstream>
 
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // reads 'H'
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
 
    char c2;
    s1.get(c2);         // reads 'e'
    char str[5];
    s1.get(str, 5);     // reads "llo,"
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
 
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // reads the rest, not including '\n'
    std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n';
}

Вывод:

after reading H, gcount() == 1
after reading llo,, gcount() == 4
Hello, world.
After the last get(), gcount() == 7

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение, как опубликовано Правильное поведение
LWG 370 C++98 эффект перегрузки (5) был get(s, count, widen('\n')),
что соответствует эффекту перегрузки (3)
исправлено на
get(strbuf, widen('\n'))
LWG 531 C++98 перегрузки (3,4) не могли обработать
случай, когда count не положительно
в этом случае ни один символ не
извлекается

См. также

read
извлекает блоки символов
(публичная функция-член)
operator>>
извлекает отформатированные данные
(публичная функция-член)
operator>>(std::basic_istream)
извлекает символы и массивы символов
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_istream/get

Spec-Zone.ru

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