You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用reinterpret_cast<>二进制写入文件是否为不良用法?

关于用reinterpret_cast<char*>二进制写入文件的用法分析

先看你给出的代码示例:

Foo program[] {...};

ofstream ofs{file_path, std::ios::binary};

if (ofs) {
   ofs.write(reinterpret_cast<char*>(program), sizeof(program));
   ofs.close();
}

核心结论

这种用法不属于不良用法,反而在C++二进制IO场景中是常规且合规的操作。

针对你的疑问逐一解释

  1. 关于指针地址的误解
    你提到“转换得到的指针无法保证指向同一内存地址”是错误的。C++标准明确规定:任何对象指针都可以转换为char*(或unsigned char*)类型,转换后的指针必然指向原对象的起始内存字节,地址完全一致。这种转换是标准允许的、用于直接访问对象底层字节的合法手段。

  2. 是否属于不良编程风格
    完全不是。std::ofstream::write的第一个参数要求是const char*类型,而我们要写入的是Foo数组的二进制内容,用reinterpret_cast<char*>做类型转换是最直接且符合标准的方式,不存在风格问题。

需要注意的前提

这种写法的有效性依赖于Foo是**可平凡复制(trivially copyable)**的类型:

  • 如果Foo包含非平凡构造/析构函数、虚函数,或者成员中有不可平凡复制的类型(比如std::string),直接二进制写入再读取会破坏对象的内部状态,导致未定义行为。
  • 但这是二进制序列化本身的限制,和reinterpret_cast的用法无关。

内容的提问来源于stack exchange,提问作者Victor Terme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:19:49