以下
之间有什么区别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中不会附加任何内容?
由于
答案 0 :(得分:5)
有什么区别?
它们在效果上都是等效的,但它们的性能或效率可能不同。
我认为rdbuf()不会返回NULL?
你认真对待。
如果stringstream b为空,那么是否定义了行为?
是
在这种情况下,rdbuf返回的第一个字符是否具有eof特征?
没有。第一次调用.sgetc()
(或.snextc()
)不会返回带有eof特征的字符,它会返回EOF(不是字符)。因此,您的示例将等同于a << "" << "some text"
。