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

Jes*_*son 14 c++ ostringstream

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

std::ostringstream stream("initial string ");
stream << 5;
std::cout << stream.str();
Run Code Online (Sandbox Code Playgroud)

我的期望是:

initial string 5
Run Code Online (Sandbox Code Playgroud)

我得到的是:

5nitial string
Run Code Online (Sandbox Code Playgroud)

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

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

Jer*_*fin 19

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

  • 现在很明显,你可以解释它与文件有关,但在此之前,我总是认为这种行为很奇怪.我那天新的酷事. (3认同)

Ara*_*raK 15

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

std::ostringstream stream("initial string ", std::ios::ate);
Run Code Online (Sandbox Code Playgroud)