static_cast
和 reinterpret_cast
似乎都可以很好地将 void*
转换为另一种指针类型。是否有充分的理由偏爱其中一个?
最佳答案
使用 static_cast
:它是准确描述此处进行的转换的最窄类型。
有一种误解,认为使用 reinterpret_cast
会更好,因为这意味着“完全忽略类型安全,只是从 A 转换为 B”。
但是,这实际上并没有描述 reinterpret_cast
的效果。相反,reinterpret_cast
有多种含义,所有含义都认为“reinterpret_cast
执行的映射是实现定义的”。 [5.2.10.3]
但在从 void*
到 T*
的特殊情况下,映射完全由标准定义;即,将类型分配给无类型指针而不更改其地址。
这是更喜欢 static_cast
的原因。
另外,并且可以说更重要的是,每次使用 reinterpret_cast
都是非常危险的,因为它会将任何东西真正转换为其他任何东西(对于指针),而 static_cast
限制性更强,因此提供了更好的保护水平。这已经使我免于意外尝试将一种指针类型强制转换为另一种的错误。
关于c++ - 在将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5013596/