当试图以跨平台的方式处理大型文件(2/4GB)时,将pos_type转换为uint64_t是否安全?
tellp和解决方案)、可移植和安全的.
发布于 2012-01-06 10:42:20
无论是在实践上还是理论上。就标准而言,我不认为可以保证pos_type甚至可以转换为一个完整的类型;从逻辑上讲,它不应该是这样的,因为它包含了几个独立的数据:文件和状态信息的偏移量,用于多字节解码。
另一方面,在实践中,基于Unix的机器不应该有任何问题;在Windows下,如果以文本模式打开文件,数值并不一定有多大意义,但您可以将pos_type转换为uint64_t并返回,而不会丢失值(除非原始pos_type中确实存在显着的多字节状态,但我不知道在这种情况下有任何编码)。
应该可以在编译时确定pos_type是否将隐式转换为整数类型,并将其用于某种类型的static_assert。不过,我不认为这买得太多;它无法确定积分值是否在任何方面是可用的,除非重新转换回pos_type。(例如,它可能是某种魔法饼干。但我不会太担心。该标准允许许多无法合理实现的事情。请记住,即使在Windows下,该值也并不总是表示可以读取的确切字节数。
https://stackoverflow.com/questions/8756496
复制相似问题