ストリームがストリームの最後に到達すると、std::ios_base::eofbit
設定されます。日付を抽出しようとする前に、抽出は状態フラグが設定されているかどうかを確認し、設定されている場合は何もせず、抽出は失敗します。
std::stringstream ss;
ss << "54321";
ss >> num; // sets eof:
std::cout << "eof: " << ss.eof() << "\n";
いずれかの状態フラグが設定された後にストリームに何かを実行させるには、最初にフラグをクリアする必要があります。
ss.clear();
ss << "12345";
if (ss >> num) {
std::cout << "num=" << num << "\n";
}
else {
std::cout << "failed to extract a value\n";
}
個人的には、通常、出力演算子を使用して文字列ストリームのコンテンツを設定することはありません。代わりに、私は通常str()
メンバーを使用しています:
std::ostringstream out; // note: this is just an output string stream
...
out.clear(); // the clear is still needed
out.str("12345");