将一个stringstream附加到另一个。什么是最安全的?

时间:2012-05-11 19:29:47

标签: c++ stringstream

以下

之间有什么区别
stringstream a;
stringstream b;
a << "hi";
b << "there";

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


我一直在使用rdbuf()。我注意到C ++ Reference对stringstream::rdbuf说:

  

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

我认为rdbuf()不会返回NULL?我无法传递NULL。我有这样的错误char *array = NULL; a << array;。如果stringstream b为空,那么在执行a << b.rdbuf() << "some text"时是否定义了行为?在这种情况下,rdbuf返回的第一个字符是否具有eof特征,因此b中不会附加任何内容?

由于

1 个答案:

答案 0 :(得分:5)

  

有什么区别?

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

  

我认为rdbuf()不会返回NULL?

你认真对待。

  

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

  

在这种情况下,rdbuf返回的第一个字符是否具有eof特征?

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