名前空間
変種
操作

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

From cppreference.com
< cpp‎ | io‎ | basic_ostream
 
 
 
 
class sentry;

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

目次

[編集] メンバ関数

(コンストラクタ)
sentryオブジェクトを構築します。すべての準備タスクはここで実行されます
(public member function) [編集]
(デストラクタ)
必要に応じて、フォーマット済み出力の後、または例外の後でストリームオブジェクトを最終処理します
(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を返す場合、例外を伝播せずに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 boolconst として宣言されていませんでした(シノプシスではconstです) const が追加されました
LWG 835 C++98 osunitbufを設定すると、デストラクタはos.flush()を呼び出しますが、これは
(デストラクタがさらにsentryオブジェクトを作成し、以下同様に繰り返される)UnformattedOutputFunctionであり、別のsentryオブジェクトを作成します
(そのデストラクタがさらにsentryオブジェクトを作成し、以下同様に繰り返される)
呼び出します
os.rdbuf()->pubsync()
この場合、代わりに

[編集] 関連項目

書式付きデータを挿入する
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)