stringstream を繰り返し使用して文字列に追加できるかどうかを確認する短いテストプログラムを作成しました。
最初のバージョンでは Output1 を取得しましたが、s1 が空のままである理由がよくわかりません。ss.clear() を実行してから、Output2 で期待される結果を取得する必要があることがわかりました。明確にしないと機能しない理由を誰か説明できますか? 数値を繰り返し入力して文字列に戻すと、常に数値が取得されるはずです。番号が追加されるかどうかはわかりませんでしたが、それはこの例の要点ではありません。
ここ:http://www.cplusplus.com/reference/sstream/stringstream/任意の操作を使用できると書かれており、文字列をリセットするための制限や要件はありません。また、後で ss.clear() を介さずに出力を取得する理由もわかりません。
また、その後 s0 が変わらないことに少し驚いています。コンテンツが既にある場合、ストリームは文字列を上書きまたはリセットしませんか?
私はcygwinでgcc 3.4.4を使用しています。
int main()
{
std::string s0;
std::string s1;
int n = 1;
std::stringstream ss;
ss << n;
ss >> s0;
cout << "S0:" << s0 << endl;
ss.clear(); <-- If I remove this, then s1 stays empty.
n = 2;
ss << n;
ss >> s1;
cout << "S1:" << s1 << endl;
ss << n;
ss >> s0;
cout << "S0_2:" << s0 << endl; <-- Why is s0 still 1?
}
出力 1:
S0:1
S1:
S0_2:1
出力 2:
S0:1
S1:2
S0_2:1