gpt4 book ai didi

c++ - iterator::difference_types 是否独立于系统

转载 作者:搜寻专家 更新时间:2023-10-31 00:02:31 26 4
gpt4 key购买 nike

我有一些序列化逻辑,其中我还序列化了 STL 数据结构。目前,我只是编写大小字段,然后通过遍历它来编写结构的每个元素。在反序列化中,我读取了大小字段,然后我知道何时读取完数据结构。

不,问题是如何正确编写大小字段并且独立于系统。目前我正在使用 std::iterator_traits<const_iterator>::difference_type作为存储在文件中的类型。但是,当我尝试在不同系统之间交换文件时,我不确定这种类型是否保证与系统无关,或者它是否可能会发生变化。

我查看了 std::string 的这种类型在这种情况下 sizeof(std::iterator_traits<std::string::const_iterator>::difference_type)在 64 位机器上返回 8。所以我想在这种情况下,这只是 size_t 的类型定义。占用一个词。目前我这里没有可用的 32 位机器,所以我无法检查那里的大小是否不同。

这是标准保证可移植的,还是我应该对这里的所有数据结构使用某种固定类型来编码长度?

最佳答案

所有这些 typedef 的重点是您不需要全局修复类型!

对于序列化,您必须决定并修复您的序列化格式。那时,您可能只是要求大小适合 32 位整数,测试给定大小是否适合并转换。如果出现错误,您可以让序列化失败(例如“数据结构不可序列化”)。如果您认为有必要,将大小字段设置为 64 位,您应该有足够的回旋余地,但您需要权衡空间与灵 active 和使用情况。您真的会拥有包含超过 40 亿个元素的容器并将它们写入磁盘吗?

序列化是关于做出决定和发布处方,您必须忍受并承担导入和导出失败的可能性。

关于c++ - iterator::difference_types 是否独立于系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com