提问者:小点点

为什么当缓冲区读取一个空的rdbuf时,它的内容会被删除?


快速示例(玩代码):

int main() 
{
   
    std::stringstream sstr;
    sstr << "hello\n";
    sstr << "world\n";

    std::stringstream sstr2;
    // sstr2 << "test\n";
    if (sstr2.rdbuf()->in_avail() != 0)
    {    
        sstr << sstr2.rdbuf();
    }

    print_me(sstr);

    return 0;
}

我有一个流SSTR。 该流保存数据。 我还希望它保存存储在SSTR2中的所有其他数据。 为此,我使用sstr<<; sstr2.rdbuf();。 如果我在SSTR2为空时执行该行,那么SSTR也将为空。 这是为什么?

注:我知道可以使用if(sstr2.rdbuf()->in_avail()!=0)来保护自己不受这种情况的影响。


共1个答案

匿名用户

如果要保留旧值,则应使用如下代码:

sstr <<  sstr.rdbuf() << sstr2.rdbuf();