我通过迭代器将vector的内容写入文件作为fallows
for(vector<Student>::iterator itr=vec.begin();itr!=vec.end();itr++){
out.write((char*)itr,sizeof *itr);
}
由于没有合适的转换函数,它会给出编译时错误。但是当我取消引用它并将其地址设置如下时
out.write( (char*)&(*itr),sizeof *itr);
工作正常。 那么为什么我不能直接使用itr呢?为什么我需要取消引用它并重新获取其地址?
答案 0 :(得分:1)
你不能像这样逐字节地串行化复杂的对象,但你的尝试甚至都没有尝试过!
您的第一个示例尝试使用迭代器,将其强制转换为char*
(完全没有意义),然后从该无意义的指针开始写入sizeof(Student)
个字节值一个文件。
你的第二个例子绕过了有用的编译器错误,告诉你你的错误,强制演员。当然,你得到一个结果,但这完全是一个无意义的结果,你的程序甚至可能会崩溃。
首先,您应该尝试序列化Student
对象,而不是指向它们的迭代器,其次,除非它们是非常简单的对象,并且您知道自己在做什么,否则&#39 ;仍然需要更多的智能序列化逻辑,而不仅仅是将其组件字节写入文件。了解对齐,填充,字节序,间接....