reinterpret_cast<int*>(char*)与static_cast<int*>(static_cast<void*>(char*)) -- 应该使用哪一个?(涉及到IT技术)

4
当你动态分配了一个类型为char *的缓冲区,并想将其转换为特定类型时,应该使用类似以下代码:
reinterpret_cast<int *>(char *)

或者类似于此。
static_cast<int *>(static_cast<void *>(char *))

为什么?

个人而言,我倾向于使用后者,因为对我来说,它并不是数据的“重新解释”(而只是分配缓冲区的机械方式),并且它看起来不像典型的reinterpret_cast那样容易出现错误,但这是否正确呢?


你根本不应该这样做,因为这是未定义的行为。 - Kerrek SB
KerrekSB:“this” 究竟指的是什么? - user541686
2
@KerrekSB:它完全被定义并且甚至在 vector 的实现中被使用(至少在我的 SGI 版本中)。 - Daniel
这两个表单对于标准布局类型完全相同。根据 §5.2.10/7(C++11)。 - Cubbi
2
到目前为止,答案似乎把这个问题看作是一个抽象的问题。对于一个真实世界的例子,我有时会在套接字或从文件读取数据时遇到这种情况。我读取了一个无符号字符*数组,但数组中的数据实际上是整数。在这种情况下,我想要将我的无符号字符数组“重新解释”为整数数组。这不就是reinterpret_cast的用途吗? - BHS
1个回答

4

根据Dave Abrahams的说法, 使用链式的static_cast是强制指针类型的正确、标准方法。

个人而言,在这些情况下我使用reinterpret_cast,因为我从未遇到过处理链式static_cast和单一reinterpret_cast会产生不同结果的架构。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接