stringstream缓冲区的地址如何变化

时间:2010-08-02 14:52:55

标签: c++

当我使用<<运算符将值放入缓冲区有时缓冲区的地址会发生变化。它是将值复制到新地址还是将它们移动到内存中的新地址?如何知道存储数据的地址?

另外,我对一本涵盖c ++中的流的书感兴趣。

4 个答案:

答案 0 :(得分:2)

如果您将更多数据放入缓冲区然后它可以保留,则流类将自动重新分配更大的缓冲区并将所有当前数据移动到新缓冲区中。

iostreams课程的全部内容是你不应该担心这些细节。

关于IOStream的一本书:试试Angelika Langer的Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference(我见过并信任他)(前锋是由Jerry Schwartz撰写的,他编写了iostreams的第一个实现。他写了一本关于主题,但它似乎绝版)

答案 1 :(得分:1)

就书籍而言,这完全取决于你想要的细节程度。 C ++标准库(Nicolai Josuttis)在使用iostreams方面做得很好。

如果您想了解实施细节(例如,您要实施自己的iostream),标准C ++ Iostream和语言环境(Langer和Kreft)是关于该主题的开创性工作。

答案 2 :(得分:1)

这是像

这样的陷阱
std::vector<int> v;
v.push_back(1);
v.push_back(v.back());

std::string s("x");
s.append(s.c_str());

变异并引用STL容器中的地址会导致内存错误,因为容器将内存位置视为私有资源,但不幸的是,在性能名称中抽象不是防水的。我被矢量推回问题所困扰,我花了很长时间才弄明白。

答案 3 :(得分:0)

关于这本书,只提一个,Thinking in C++, volume 2(第4章Iostreams),布鲁斯·埃克尔。