给定一个字符串流对象,我想将它复制到另一个。根据 :
(除其他外),正确的方法是使用rdbuf()
会员。但是,这似乎会导致问题,特别是如果 stringstream 是 const。
例如:
void DoSomething(stringstream & ss)
{
stringstream sstmp;
cout << "pos 1: " << ss.tellg() << "\n";
sstmp << ss.rdbuf();
cout << "pos 2: " << ss.tellg() << "\n";
// sstmp.rdbuf()->pubseekpos(0, ios_base::in | ios_base::out);
cout << "String: " << sstmp.str() << "\n";
}
int main(void)
{
stringstream ss;
ss << "Hello";
DoSomething(ss);
DoSomething(ss);
return 0;
}
输出是
pos 1: 0
pos 2: 5
String: Hello
pos 1: 5
pos 2: 5
String:
第一次调用DoSomething()
更改了内部指针,即使 is const 也似乎这样做了stringstream
(此处省略,因为 eventellg()
不是 const)。解决这个问题的方法是使用seekg()
,但不能在 const 流上调用。我尝试了另一种方式(在代码中注释掉)但没有成功。
那么可以做些什么:
复制一个 (const)
stringstream
而没有真正改变它,或者重置 const 对象的位置?
注意:在 Arch Linux 上使用 gcc 4.8.1 编译