最終更新日時:
が更新

履歴 編集

function
<istream>

std::basic_istream::sentry::コンストラクタ

explicit sentry(basic_istream& is, bool noskipws = false);

概要

入力処理の前処理を行う。

効果

  1. is.good()falseなら、is.setstate(failbit)を呼び出し、関数から帰る。
  2. is.tie()が非ヌルポインタなら、is.tie()->flush()を呼び出す。
    • is.tie()が指す先のストリームバッファのput areaが空なら、この処理を省略しても良い。
    • is.rdbuf()->underflow()の呼び出しが発生するまで、この処理を遅延させても良い。
    • is.rdbuf()->underflow()の呼び出しが発生しなかったら、この処理を省略して良い(標準ライブラリ実装内部で、そのような最適化を行っても良い)。
  3. noskipwsfalseかつis.flags() & ios_base::skipwsが真なら、ストリームから空白文字を読み捨てる。

ここまでの手順が完了したら、このオブジェクトのoperator bool関数はtrueを、さもなくばfalseを返すようになる。

参照

  • LWG Issue 419. istream extractors not setting failbit if eofbit is already set
    • C++11で、is.good()falseの場合にsetstate(failbit)を呼び出すことが規定された。それ以前は「good()trueなら入力の準備をする」としか書かれておらず、既にeofbitが立っているストリームから抽出してもfailbitが立たないため、抽出の失敗を検知できなかった