std::basic_ostream<CharT,Traits>:: sentry
|
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 ( ) を呼び出す |
関連項目
|
フォーマット済みデータを挿入
(公開メンバ関数) |