2010-08-02 40 views
0

当我使用< <运算符将值放入缓冲区时,缓冲区的地址有时会改变。它是否将值复制到新地址或将它们移动到内存中的新地址,以及如何知道数据存储的地址?字符串流缓冲区的地址如何变化

另外,我会对一本关于C++中的流的书感兴趣。

回答

2

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

iostreams类的整个重点是你不应该担心这些细节。

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

+0

好吧,如果你保存了其他地方的缓冲区地址_before_在其中添加一些文本。 EG:'ptr = s; s <<“additionnaltext”; //现在可能是错误的' – Gui13 2010-08-02 15:06:52

1

就书本而言,这一切都取决于你想要的细节水平。 C++标准库(Nicolai Josuttis)在使用iostreams方面做得很好。

如果您想了解实现细节(例如,你在外面实现自己的输入输出流),标准C++ iostream和语言环境(Langer和Kreft)关于这个问题的开创性工作。

1

这是在类陷阱的诸如

std::vector<int> v; 
v.push_back(1); 
v.push_back(v.back()); 

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

突变和引用地址STL容器内作为容器对待存储器位置作为可引起存储器错误一个私人资源,但不幸的是,在表现抽象的名称不水密。我被矢量回推问题困扰,花了我很长时间才弄清楚。