stringstream-> rdbuf() - > pubsetbuf没有设置缓冲区

时间:2012-09-18 16:47:22

标签: c++ stl stringstream stringbuffer

我正在尝试使用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

1 个答案:

答案 0 :(得分:11)

不应该设置内容。 pubsetbuf来电virtual setbuf

basic_streambuf<charT,traits>* setbuf(charT* s, streamsize n);

15效果:实现定义,但setbuf(0,0)无效。

16返回:this。

VS 2010. setbuf中的虚拟方法basic_stringbuf没有重载,它使用默认来自basic_streambuf

virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
    {   // offer buffer to external agent (do nothing)
    return (this);
    }