可能重复:
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);
其中buffer
是char *
(内存块包含T
类型的值)。
答案 0 :(得分:5)
The chain of two static_cast
s 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
舞更容易理解。