std::basic_istream<CharT,Traits>::sentry
| class sentry; |
||
basic_istream::sentryクラスのオブジェクトは、フォーマット済みおよび非フォーマット済みの両方の入力を実行するstd::basic_istreamの各メンバ関数の先頭でローカルスコープで構築されます。そのコンストラクタは入力ストリームを準備します:ストリームが既に失敗状態にあるかチェックし、tie()'dされた出力ストリームをフラッシュし、noskipwsフラグが設定されていない限り先頭の空白文字をスキップし、必要に応じてその他の実装定義のタスクを実行します。例外がスローされた場合でも、すべてのクリーンアップがデストラクタで実行されることが保証されているため、必要に応じて実行されます。
目次 |
[編集] メンバ型
traits_type
|
Traits
|
[編集] メンバ関数
| (コンストラクタ) |
sentryオブジェクトを構築します。すべての準備タスクがここで実行されます。 (public メンバ関数) |
| (デストラクタ) |
フォーマット済み入力後、または必要に応じて例外発生後に、ストリームオブジェクトを最終化します。 (public メンバ関数) |
| operator= [削除] |
コピー代入はできません。 (public member function) |
| operator bool |
ストリームオブジェクトの準備が成功したかどうかをチェックします。 (public メンバ関数) |
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() がヌルポインタでない場合、外部ストリームとの同期のために is.tie()->flush() を呼び出します。この呼び出しは、 is.tie() の出力領域が空の場合に抑制されることがあります。実装は、 is.rdbuf()->underflow() が呼び出されるまで flush() の呼び出しを延期することがあります。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を設定します。 |
[編集] 関連項目
| 書式付きデータを抽出する (public member function) | |
| 文字と文字配列を抽出する (function template) |