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) | |
Извлекает символ или символы из потока.
Все версии ведут себя как UnformattedInputFunction s . После создания и проверки сторожевого объекта эти функции выполняют следующее:
- count меньше 1 или сохранено count - 1 символов.
- возникает условие конца файла во входной последовательности (вызывается setstate ( eofbit ) ).
-
следующий доступный входной символ
c
равен
delim
, как определено с помощью
Traits
::
eq
(
c, delim
)
. Этот символ не извлекается (в отличие от
getline()).
- возникнет условие конца файла во входной последовательности.
- вставка в выходную последовательность завершится неудачей (в этом случае символ, который не удалось вставить, не извлекается).
- следующий доступный входной символ c окажется равным delim , как определено с помощью Traits :: eq ( c, delim ) . Этот символ не извлекается.
- возникнет исключение (в этом случае исключение перехватывается и не пробрасывается повторно).
Если символы не были извлечены, вызывается setstate ( failbit ) .
Все версии устанавливают значение gcount() равным количеству извлечённых символов.
Содержание |
Параметры
| ch | - | ссылка на символ для записи результата |
| s | - | указатель на строку символов для хранения символов |
| count | - | размер строки символов, на которую указывает s |
| delim | - | разделительный символ для остановки извлечения. Не извлекается и не сохраняется |
| strbuf | - | буфер потока для чтения содержимого |
Возвращаемое значение
Исключения
Если внутренняя операция выбрасывает исключение, оно перехватывается и
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 неположительный |
в этом случае символы
не извлекаются |
Смотрите также
|
извлекает блоки символов
(публичная функция-член) |
|
|
извлекает форматированные данные
(публичная функция-член) |
|
|
извлекает символы и массивы символов
(шаблон функции) |