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

loo*_*oop 0 c++ stringstream

以下是有什么区别的

stringstream a;
stringstream b;
a << "hi";
b << "there";
Run Code Online (Sandbox Code Playgroud)

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中不会附加任何内容?

谢谢

Rob*_*obᵩ 5

有什么不同 ?

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

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

你正确地采取了它.

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

是.

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

不会.对.sgetc()(或.snextc())的第一次调用不会返回带有eof特征的字符,它会返回EOF(不是字符).所以,你的例子就相当于a << "" << "some text".