我正在尝试使用 pubsetbuf 方法修改 stringstream 对象的 stringbuffer 而不必复制字符串,但它不起作用。我正在关注 http://www.cplusplus.com/reference/iostream/streambuf/pubsetbuf/ 中的文档.这是我的示例代码:
#include <iostream>
#include <sstream>
int main(int argc, char* argv[])
{
std::stringstream stream("You say goodbye");
char replace[] = {"And I say hello"};
std::cout << stream.str() << std::endl; // Checking original contents
stream.rdbuf()->pubsetbuf(replace, 16); // Should set contents here
std::cout << stream.str() << std::endl; // But don't :(
return 0;
}
输出是:
You say goodbye
You say goodbye
我知道我可以使用 stream.str(replace),但是这个方法复制了“replace”的值,我不想复制。
我错过了什么?
更新:我正在使用 VS2010
最佳答案
不应该设置内容。 pubsetbuf
调用虚拟 setbuf
basic_streambuf<charT,traits>* setbuf(charT* s, streamsize n);
15 Effects: implementation-defined, except that setbuf(0,0) has no effect.
16 Returns: this.
VS 2010. basic_stringbuf
中没有重载虚方法setbuf
,它使用basic_streambuf
中的默认值
virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
{ // offer buffer to external agent (do nothing)
return (this);
}
关于c++ - stringstream->rdbuf()->pubsetbuf 没有设置缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481463/