我写了一个简短的测试程序,看看我是否可以使用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