Namespaces
Variants

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

From cppreference.net
class sentry ;

basic_ostream::sentry クラスのオブジェクトは、出力(フォーマット済みおよび未フォーマットの両方)を実行する std::basic_ostream の各メンバー関数の開始時にローカルスコープで構築されます。そのコンストラクタは出力ストリームを準備します:ストリームが既に失敗状態にあるかどうかをチェックし、tie()された出力ストリームをフラッシュし、必要に応じて他の実装定義のタスクを実行します。実装定義のクリーンアップ、および必要に応じた出力ストリームのフラッシュはデストラクタで実行されるため、出力中に例外がスローされた場合でも確実に実行されることが保証されます。

目次

メンバー関数

(constructor)
セントリーオブジェクトを構築する。すべての準備作業はここで行われる
(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 ( ) がnullポインタでない場合、 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 を返した場合、 os. rdstate ( ) badbit を設定します(例外を伝播させません)。


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 であり、別のセントリーオブジェクトを作成する
(そのデストラクタはさらに別のセントリーオブジェクトを作成し、以下同様に続く)
この場合、代わりに
os. rdbuf ( ) - > pubsync ( )
を呼び出す

関連項目

フォーマット済みデータを挿入
(公開メンバ関数)