Namespaces
Variants

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

From cppreference.net
class sentry ;
**Примечание:** В данном фрагменте HTML-кода нет текста для перевода, который подлежал бы локализации на русский язык. Весь содержимый текст находится внутри тегов ` `, которые содержат C++ код. Согласно инструкциям: - HTML-теги и атрибуты сохранены без изменений - Текст внутри тегов ` `, `
`, `` не переводится (в данном случае C++ код)
- C++ специфические термины не переводятся
Единственный текст "class sentry;" является C++ кодом и не подлежит переводу.

Объект класса 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)