ostringstream的string构造函数的目的是什么?

19

我在MSVC 2005上有以下代码。

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

我期望的是:

initial string 5

我得到的是:

5nitial string

用字符串初始化流时,我期望流的位置移动到初始字符串的末尾。显然,STL不同意我的看法(这不是第一次了)。

这种行为有什么目的?是否有任何有用的用例?还有,有没有办法将流位置推进到初始字符串的末尾?

3个回答

23

使用 ostringstream 并提供一个初始值就像打开一个已存在的文件并进行写入一样。你有一些数据,在未指定其他位置的情况下,初始位置将位于数据开头。你可以在数据中查找,或者指定 ios::ate 将写指针初始定位到现有数据的末尾,或者指定 ios::app 使写指针始终定位于现有数据的末尾。


这很有道理。ostringstream 符合其他流类型,并默认为开头,直到明确移动到其他位置。谢谢。 - Jesse Stimpson
4
现在你解释了文件相关性后,这显然很明显,但之前我总觉得行为非常奇怪。这是我今天新学到的酷炫事实。 - Martin York

18
可以通过构造函数的第二个(可选)参数将流游标设置到末尾:
std::ostringstream stream("initial string ", std::ios::ate);

4
为了达到目标,可以采取以下方式:
stream.seekp(0, ios_base::end);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接