ostringstream的字符串构造函数的目的是什么?

时间:2010-10-01 15:16:53

标签: c++ ostringstream

在MSVC 2005上,我有以下代码。

std::ostringstream stream("initial string ");
stream << 5;
std::cout << stream.str();

我的期望是:

initial string 5

我得到的是:

5nitial string

使用字符串初始化流,我希望流将其位置移动到初始字符串的末尾。显然,STL不同意我的意见(不是第一次)。

这种行为的目的是什么?这个用例对任何事情都有用吗?另外,有没有办法将流位置提升到初始字符串的末尾?

3 个答案:

答案 0 :(得分:19)

使用ostringstream并提供初始值就像打开现有文件进行编写一样。您有一些数据,除非另有说明,否则您的初始位置将位于数据的开头。您可以在数据中查找,或者指定ios::ate以将写指针初始定位到现有数据的末尾,或者您可以指定ios::app以始终将写指针定位到现有数据的末尾数据

答案 1 :(得分:15)

您可以指定构造函数的第二个(可选)参数,以便在末尾设置流游标:

std::ostringstream stream("initial string ", std::ios::ate);

答案 2 :(得分:4)

为了寻求结束,请执行以下操作:

stream.seekp(0, ios_base::end);

至于为什么写位置默认为前面,我不知道。