我寫了一個簡短的測試程序,看看我是否可以使用stringstream重複追加到一個字符串。爲什麼我必須在這裏清除std :: stringstream?
在第一個版本中,我得到了Output1,我不明白爲什麼s1保持空白。 我發現我必須做ss.clear()然後在Output2中得到預期的結果。任何人都可以解釋爲什麼沒有明確的說明它不起作用嗎?我會預料到的是,如果我反覆輸入數字並將它們取回到一個字符串中,我應該總是得到這個數字。我不確定數字是否被附加,但這個例子並不重要。
這裏:http://www.cplusplus.com/reference/sstream/stringstream/它說我可以使用任何操作,並沒有限制或要求重置字符串,我可以看到。我也不明白爲什麼之後我會得到沒有ss.clear()的輸出。
另外我有點驚訝,s0保持不變。因此,如果流已經包含內容,那麼流不覆蓋或重置該字符串?
我使用gcc 3.4.4與cygwin。
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
謝謝。我想這是文件的地方?我想知道爲什麼這不是在頁面上提到的。我認爲在循環中使用stringstream會是一個不錯的陷阱。 :) – Devolus 2013-05-08 14:32:42
它來自'eofbit'的定義,即它應該在流處於輸入序列末尾時設置。這在第一次閱讀後成爲現實。 – jxh 2013-05-08 14:41:45