Namespaces
Variants

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

From cppreference.net
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 を設定する

関連項目

書式化データを抽出
(公開メンバ関数)
文字および文字配列を抽出
(関数テンプレート)