Namespaces
Variants

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

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

Объект класса basic_ostream::sentry создаётся в локальной области видимости в начале каждой функции-члена std::basic_ostream , выполняющей вывод (как форматированный, так и неформатированный). Его конструктор подготавливает выходной поток: проверяет, находится ли поток уже в ошибочном состоянии, сбрасывает связанные (tie()'d) выходные потоки и выполняет другие зависящие от реализации действия при необходимости. Зависящая от реализации очистка, а также при необходимости сброс выходного потока выполняются в деструкторе, что гарантирует их выполнение даже при возникновении исключений во время вывода.

Содержание

Функции-члены

(constructor)
создает объект sentry. Все подготовительные задачи выполняются здесь
(public member function)
(destructor)
завершает объект потока после форматированного вывода или после исключения, если необходимо
(public member function)
operator=
оператор присваивания удален
(public member function)
operator bool
проверяет, была ли подготовка объекта потока успешной
(public member function)

std::basic_ostream::sentry:: sentry

explicit sentry ( std:: basic_ostream < CharT, Traits > & os ) ;

Подготавливает поток для форматированного вывода.

Если os. good ( ) возвращает false , завершает работу. В противном случае, если os. tie ( ) не является нулевым указателем, вызывает os. tie ( ) - > flush ( ) для синхронизации выходной последовательности с внешними потоками. Во время подготовки конструктор может вызвать setstate ( failbit ) (что может выбросить std::ios_base::failure ).

Если после завершения подготовки os. good ( ) == true , то любые последующие вызовы operator bool будут возвращать true .

Параметры

os - выходной поток для подготовки

Исключения

std::ios_base::failure если возникает условие конца файла.


std::basic_ostream::sentry:: ~sentry

~sentry ( ) ;

Если ( os. flags ( ) & std:: ios_base :: unitbuf ) && ! std:: uncaught_exception ( ) && os. good ( ) ) равно true , вызывает os. rdbuf ( ) - > pubsync ( ) . Если эта функция возвращает - 1 , устанавливает badbit в os. rdstate ( ) без распространения исключения.


std::basic_ostream::sentry:: operator bool

explicit operator bool ( ) const ;

Проверяет, была ли подготовка выходного потока успешной.

Параметры

(нет)

Возвращаемое значение

true если подготовка выходного потока была успешной, false в противном случае.

Пример

#include <iostream>
#include <sstream>
struct Foo
{
    char n[6];
};
std::ostream& operator<<(std::ostream& os, Foo& f)
{
    std::ostream::sentry s(os);
    if (s)
        os.write(f.n, 5);
    return os;
}
int main()
{
    Foo f = {"abcde"};
    std::cout << f << '\n';
}

Вывод:

abcde

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 397 C++98 деструктор мог вызывать os. flush ( ) , который может генерировать исключения исключение не распространяется
LWG 442 C++98 operator bool не был объявлен const синопсисе он const ) добавлен const
LWG 835 C++98 если os устанавливает unitbuf , деструктор вызывал бы os. flush ( ) , что
является UnformattedOutputFunction и создает другой объект sentry
(чей деструктор затем создает другой объект sentry и так далее)
вызывает
os. rdbuf ( ) - > pubsync ( )
в этом случае вместо этого

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

вставляет форматированные данные
(public member function)