0

以下有什么区别

stringstream a;
stringstream b;
a << "hi";
b << "there";

a << " " << b.rdbuf();a << " " << b.str();a << " " << b.str().c_str();


我一直在使用 rdbuf()。我确实注意到 C++ 参考中提到了stringstream::rdbuf

请注意,对于任何成功构造的 istringstream 对象,该指针永远不会为 NULL,即使缓冲区字符串为空。

我认为这意味着 rdbuf() 不会返回 NULL?我不能通过NULL。我有过这样的毛病char *array = NULL; a << array;。如果 stringstream b 为空,那么在执行时定义的行为是什么a << b.rdbuf() << "some text"?在那种情况下,rdbuf 返回的第一个字符不会具有 eof 特征,因此不会附加 b 中的任何内容吗?

谢谢

4

1 回答 1

5

有什么区别 ?

它们在效果上都是相同的,但它们的性能或效率可能不同。

我认为这意味着 rdbuf() 不会返回 NULL?

你拿对了。

如果 stringstream b 为空,那么行为是否已定义?

是的。

在那种情况下,rdbuf 返回的第一个字符不会具有 eof 特征吗?

不,第一次调用.sgetc()(or .snextc()) 不会返回具有 eof 特征的字符,它会返回 EOF (这不是字符)。因此,您的示例将等效于a << "" << "some text".

于 2012-05-11T19:35:10.063 回答