std::basic_istream<CharT,Traits>:: sentry
|
class
sentry
;
|
||
`, `
`, `
Объект класса
basic_istream::sentry
создается в локальной области видимости в начале каждой функции-члена
std::basic_istream
, выполняющей ввод (как форматированный, так и неформатированный). Его конструктор подготавливает входной поток: проверяет, находится ли поток уже в ошибочном состоянии, сбрасывает привязанные выходные потоки (tie()), пропускает ведущие пробельные символы, если не установлен флаг
noskipws
, и выполняет другие зависящие от реализации действия при необходимости. Вся необходимая очистка выполняется в деструкторе, что гарантирует ее выполнение даже при возникновении исключений во время ввода.
Содержание |
Типы членов
traits_type
|
Traits
|
Функции-члены
|
(constructor)
|
создает объект sentry. Все подготовительные задачи выполняются здесь
(public member function) |
|
(destructor)
|
завершает объект потока после форматированного ввода или после исключения, если необходимо
(public member function) |
|
operator=
[deleted]
|
не копируемый оператор присваивания
(public member function) |
|
operator bool
|
проверяет, была ли подготовка объекта потока успешной
(public member function) |
std::basic_istream::sentry:: sentry
|
explicit
sentry
(
std::
basic_istream
<
CharT, Traits
>
&
is,
bool
noskipws
=
false
)
;
|
||
Подготавливает поток для форматированного ввода.
Если is. good ( ) равно false , вызывает is. setstate ( std:: ios_base :: failbit ) и возвращает. В противном случае, если is. tie ( ) не является нулевым указателем, вызывает is. tie ( ) - > flush ( ) для синхронизации выходной последовательности с внешними потоками. Этот вызов может быть подавлен, если область вывода is. tie ( ) пуста. Реализация может отложить вызов flush ( ) до вызова is. rdbuf ( ) - > underflow ( ) . Если такой вызов не происходит до уничтожения объекта sentry, он может быть полностью устранен.
Если noskipws равен нулю и is. flags ( ) & std:: ios_base :: skipws ненулевое, функция извлекает и отбрасывает все пробельные символы до тех пор, пока следующий доступный символ не станет непробельным (определяется текущей локалью в is ). Если is. rdbuf ( ) - > sbumpc ( ) или is. rdbuf ( ) - > sgetc ( ) возвращает traits :: eof ( ) , функция вызывает setstate ( std:: ios_base :: failbit | std:: ios_base :: eofbit ) (что может выбросить std::ios_base::failure ).
Может выполняться дополнительная подготовка, определяемая реализацией, которая может вызывать setstate ( std:: ios_base :: failbit ) (что может выбросить std::ios_base::failure ).
Если после завершения подготовки is. good ( ) == true , то любые последующие вызовы operator bool будут возвращать true .
Параметры
| is | - | входной поток для подготовки |
| noskipws | - | true если пробельные символы не должны пропускаться |
Исключения
std::ios_base::failure если возникает условие конца файла при пропуске пробельных символов.
std::basic_istream::sentry:: ~sentry
|
~sentry
(
)
;
|
||
Ничего не делает.
std::basic_istream::sentry:: operator bool
|
explicit
operator
bool
(
)
const
;
|
||
Проверяет, была ли успешной подготовка входного потока.
Параметры
(нет)
Возвращаемое значение
true если инициализация входного потока была успешной, false в противном случае.
Пример
#include <iostream> #include <sstream> struct Foo { char n[5]; }; std::istream& operator>>(std::istream& is, Foo& f) { std::istream::sentry s(is); if (s) is.read(f.n, 5); return is; } int main() { std::string input = " abcde"; std::istringstream stream(input); Foo f; stream >> f; std::cout.write(f.n, 5); std::cout << '\n'; }
Вывод:
abcde
Отчёты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 195 | C++98 |
было неясно, будет ли конструктор устанавливать
eofbit
|
прояснено |
| LWG 419 | C++98 |
конструктор не устанавливал
failbit
если
eofbit
был установлен
|
устанавливает
failbit
в этом случае
|
Смотрите также
|
извлекает форматированные данные
(public member function) |
|
|
извлекает символы и символьные массивы
(function template) |