std::basic_ostream<CharT,Traits>:: sentry
|
class
sentry
;
|
||
Объект класса
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) |