std::basic_istream<CharT,Traits>:: sentry
|
class
sentry
;
|
||
basic_istream::sentry
クラスのオブジェクトは、入力(フォーマット済みおよび未フォーマットの両方)を実行する
std::basic_istream
の各メンバー関数の開始時にローカルスコープで構築されます。そのコンストラクタは入力ストリームを準備します:ストリームが既に失敗状態にあるかどうかをチェックし、tie()された出力ストリームをフラッシュし、
noskipws
フラグが設定されていない限り先頭の空白をスキップし、必要に応じて他の実装定義のタスクを実行します。必要なすべてのクリーンアップはデストラクタで実行されるため、入力中に例外がスローされた場合でも確実に実行されることが保証されます。
目次 |
メンバー型
traits_type
|
Traits
|
メンバー関数
|
(constructor)
|
セントリオブジェクトを構築する。すべての準備作業はここで行われる
(public member function) |
|
(destructor)
|
必要に応じて、書式化された入力後または例外発生後にストリームオブジェクトを終了処理する
(public member function) |
|
operator=
[deleted]
|
コピー代入不可
(public member function) |
|
operator bool
|
ストリームオブジェクトの準備が成功したかどうかをチェックする
(public member function) |
std::basic_istream::sentry:: sentry
|
explicit
sentry
(
std::
basic_istream
<
CharT, Traits
>
&
is,
bool
noskipws
=
false
)
;
|
||
ストリームを書式化入力のために準備します。
is. good ( ) が false の場合、 is. setstate ( std:: ios_base :: failbit ) を呼び出して戻ります。それ以外の場合、 is. tie ( ) がnullポインタでない場合、 is. tie ( ) - > flush ( ) を呼び出して出力シーケンスを外部ストリームと同期させます。 is. tie ( ) のput領域が空の場合、この呼び出しは抑制されることがあります。実装は flush ( ) の呼び出しを is. rdbuf ( ) - > underflow ( ) の呼び出しが発生するまで遅延させる可能性があります。sentryオブジェクトが破棄される前にそのような呼び出しが発生しない場合、完全に省略される可能性があります。
noskipws がゼロで、かつ is. flags ( ) & std:: ios_base :: skipws が非ゼロの場合、この関数は次の利用可能な文字が空白文字でなくなるまで( is に現在組み込まれているロケールによって決定される)、すべての空白文字を抽出して破棄します。 is. rdbuf ( ) - > sbumpc ( ) または is. rdbuf ( ) - > sgetc ( ) が traits :: eof ( ) を返す場合、この関数は setstate ( std:: ios_base :: failbit | std:: ios_base :: eofbit ) を呼び出します(これは std::ios_base::failure をスローする可能性があります)。
追加の実装定義の準備が行われる可能性があり、それは setstate ( std:: ios_base :: failbit ) を呼び出す可能性があります(これは std::ios_base::failure をスローする可能性があります)。
準備が完了した後、 is. good ( ) == true の場合、その後 operator bool への呼び出しは true を返します。
パラメータ
| is | - | 準備する入力ストリーム |
| noskipws | - | true の場合、空白をスキップしない |
例外
std::ios_base::failure 空白をスキップする際にファイル終端条件が発生した場合。
std::basic_istream::sentry:: ~sentry
|
~sentry
(
)
;
|
||
何も行いません。
std::basic_istream::sentry:: operator bool
|
explicit
operator
bool
(
)
const
;
|
||
入力ストリームの準備が成功したかどうかをチェックします。
パラメータ
(なし)
戻り値
true 入力ストリームの初期化が成功した場合、 false それ以外の場合。
例
#include <iostream> #include <sstream> struct Foo { char n[5]; }; std::istream& operator>>(std::istream& is, Foo& f) { std::istream::sentry s(is); if (s) is.read(f.n, 5); return is; } int main() { std::string input = " abcde"; std::istringstream stream(input); Foo f; stream >> f; std::cout.write(f.n, 5); std::cout << '\n'; }
出力:
abcde
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 195 | C++98 |
コンストラクタが
eofbit
を設定するかどうか不明確
|
明確化された |
| LWG 419 | C++98 |
eofbit
が設定されている場合にコンストラクタが
failbit
を設定しなかった
|
この場合に
failbit
を設定する
|
関連項目
|
書式化データを抽出
(公開メンバ関数) |
|
|
文字および文字配列を抽出
(関数テンプレート) |