Namespaces
Variants

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

From cppreference.net
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)
**Примечание:** В соответствии с инструкциями, весь код C++ внутри тегов ` ` оставлен без изменений, так как он содержит C++ специфичные термины и находится внутри форматирующих тегов. HTML структура и нумерация (1)-(6) также сохранены в оригинальном виде.

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

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

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 , нулевой символ ( 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 if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

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

Пример

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // читает 'H'
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
    char c2;
    s1.get(c2);         // читает 'e'
    char str[5];
    s1.get(str, 5);     // читает "llo,"
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // читает остальное, не включая '\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 неположительный
в этом случае символы
не извлекаются

Смотрите также

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