gpt4 book ai didi

c++ - `reinterpret_cast` 真的有用吗?

转载 作者:行者123 更新时间:2023-12-02 18:37:27 26 4
gpt4 key购买 nike

recently learned通过 reinterpret_casting 其地址将 POD 重新解释为不同的 POD 是未定义行为。所以我只是想知道 reinterpret_cast 的潜在用例是什么,如果它不能用于其名称所暗示的那样?

最佳答案

我在两种情况下使用了reinterpret_cast:

  1. 为序列化目的或在与遗留 API 对话时与 char* 进行转换。在这种情况下,从 char* 到对象指针的转换严格来说仍然是 UB(即使非常频繁地进行)。您实际上并不需要 reinterpret_cast 在这里 — 您可以使用 memcpy 代替,但是在特定的情况下 可能环境避免复制(但在重新解释字节首先有效的情况下,memcpy 通常也不会生成任何冗余拷贝,编译器足够聪明)。

  2. 从/向 std::uintptr_t 转换指针以跨遗留 API 序列化它们或对它们执行一些非指针算法。这绝对是一个奇怪的野兽并且不会经常发生(即使在低级代码中)但是考虑这样一种情况,即有人想要利用给定平台上的指针不使用最高有效位这一事实,而这些位可以因此被用来存储一些位标志。垃圾收集器实现偶尔会这样做。有时也可以使用指针的低位,如果程序员知道指针将始终对齐,例如在 8 字节边界处(因此最低三位必须为 0)。

但老实说,我不记得我实际使用过 reinterpret_cast 的最后一个具体、合法的情况。这绝对是很多年前的事了。

关于c++ - `reinterpret_cast` 真的有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68576099/

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