如何从char *转换为T *?

时间:2011-07-19 11:17:01

标签: c++ pointers casting

  

可能重复:
  C++ When should we prefer to use a two chained static_cast over reinterpret_cast

哪个更好?

static_cast<T *>(static_cast<void *>(buffer));

reinterpret_cast<T *>(buffer);

其中bufferchar *(内存块包含T类型的值)。

5 个答案:

答案 0 :(得分:5)

The chain of two static_casts is better - 它不依赖于实现。

答案 1 :(得分:4)

reinterpret_cast应该用于将整数类型转换回原始类型。如果char *原来是T *,那么reinterpret_cast会做正确的事情。如果您正在玩其他游戏,那么您应该使用static_cast

答案 2 :(得分:2)

使用reinterpret_cast,因为这就是你在概念上所做的事情。当您希望编译器知道如何进行转换时,将使用static_cast。这是一种安全机制,因为如果编译器实际上不知道如何操作,它将生成错误。当你想说“信任我,这里的比特属于这种类型。”时会使用Reinterpret_cast。

答案 3 :(得分:1)

没有人会更好,问题是哪一个不那么糟糕。

如果缓冲区确实是T,则static_cast保证可以正常工作。您可以将其地址转换为void*然后再返回。如果它是某种其他类型,则由实现决定它是否有效。对齐问题只是潜在问题之一。

使用reinterpret_cast始终取决于实现。因此,它不会更好,但至少它显然这不是可移植的代码。

因此,我会在这里使用reinterpret_cast

答案 4 :(得分:0)

如果你真的需要这样做,reinterpret_cast。这比static_cast舞更容易理解。