以下是有什么区别的
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中不会附加任何内容?
谢谢
有什么不同 ?
它们在效果上都是等效的,但它们的性能或效率可能不同.
我认为这意味着rdbuf()不会返回NULL?
你正确地采取了它.
如果stringstream b为空,那么是否定义了行为?
是.
在这种情况下,rdbuf返回的第一个字符是否具有eof特征?
不会.对.sgetc()(或.snextc())的第一次调用不会返回带有eof特征的字符,它会返回EOF(不是字符).所以,你的例子就相当于a << "" << "some text".