エラー フラグは、ストリーム オブジェクトに対する何らかの操作が失敗するたびに設定されます。ストリームがエラーになると、エラー状態をリセットするまで、それ以上の操作は成功しません。
簡単な例を次に示します。
std::istringstream iss("ABC123");
int n;
iss >> n;
assert(!iss);
現在、ストリームはエラーになっています。ただし、まだデータが残っているため、リセットして再試行する価値がある場合があります。
iss.clear(); // note: this must come first!
std::string token;
iss >> token;
assert(iss);
別の抽出の代わりに、再試行する前に無視する必要があることがわかっている場合は、iss.ignore()
の後に呼び出すこともできます。clear()
通常、この種の試行錯誤はあまり良い方法ではありません。完全な行を取得するために、常にgetline
最初にストリームで使用します。これは、ストリームが使い果たされた場合 (ファイルの終わり、または文字列の終わり) にのみ失敗する可能性があります。次に、専用の解析ロジックによって各行の処理に進むことができ、エラーは最も適切な方法で処理できます。元のストリームのエラー フラグは粗すぎて、洗練された制御フロー設計を行うことができません。