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. После построения и проверки объекта-сторожевого объекта эти функции выполняют следующее:
Traits::eof() и устанавливает failbit и eofbit. ch, если он доступен. В противном случае оставляет ch неизменным и устанавливает failbit и eofbit. Обратите внимание, что эта функция не перегружена по типам signed char и unsigned char, в отличие от формализованного оператора ввода символов >>.get(s, count, widen('\n')), то есть читает не более std::max(0, count - 1) символов и сохраняет их в строку символов, на которую указывает s, до тех пор, пока не будет найден '\n'. s. Символы извлекаются и сохраняются до тех пор, пока не произойдет одно из следующих событий:
-
countменьше1илиcount - 1символов были сохранены. - возникает состояние конца файла в последовательности ввода (вызывается
setstate(eofbit)). - следующий доступный символ ввода
cравенdelim, как определяетсяTraits::eq(c, delim). Этот символ не извлекается (в отличие отgetline()).
count > 0, символ null (CharT() сохраняется в следующей ячейке массива.get(strbuf, widen('\n')), то есть читает доступные символы и вставляет их в заданный объект basic_streambuf, до тех пор, пока не будет найден '\n'. basic_streambuf. Символы извлекаются и вставляются в strbuf до тех пор, пока не произойдет одно из следующих событий:
- возникает состояние конца файла в последовательности ввода.
- вставка в выходную последовательность завершается неудачно (в этом случае символ, который не мог быть вставлен, не извлекается).
- следующий доступный символ ввода
cравенdelim, как определяетсяTraits::eq(c, delim). Этот символ не извлекается. - происходит исключение (в этом случае исключение обрабатывается и не перебрасывается).
Если символы не были извлечены, вызывается setstate(failbit).
Все версии устанавливают значение gcount() в количество извлеченных символов.
Параметры
| ch | - | ссылка на символ, в который нужно записать результат |
| s | - | указатель на строку символов для хранения символов |
| count | - | размер строки символов, на которую указывает s |
| delim | - | разделяющий символ для остановки извлечения. Он не извлекается и не сохраняется |
| strbuf | - | буфер потока для чтения содержимого |
Возвращаемое значение
Traits::eof().*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 не положительно |
в этом случае ни один символ не извлекается |
См. также
| извлекает блоки символов (публичная функция-член) |
|
| извлекает отформатированные данные (публичная функция-член) |
|
| извлекает символы и массивы символов (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_istream/get