Both static_cast
and reinterpret_cast
似乎适合铸造void*
到另一个指针类型。是否有充分的理由偏爱其中之一?
Use static_cast
:这是最精确的转换,准确地描述了此处进行的转换。
有一个误解,认为使用reinterpret_cast
会是更好的匹配,因为它意味着“完全忽略类型安全,只是从 A 转换到 B”。
然而,这实际上并没有描述reinterpret_cast
。相当,reinterpret_cast
有多种含义,所有这些含义都表明“由reinterpret_cast
是实现定义的。” [5.2.10.3]
但在铸造的特殊情况下void*
to T*
标准完全定义了映射;即,将类型分配给无类型指针而不更改其地址。
这是一个更喜欢的理由static_cast
.
此外,可以说更重要的是,每次使用reinterpret_cast
是非常危险的,因为它将任何东西真正转换为其他任何东西(对于指针),而static_cast
限制性更强,从而提供更好级别的保护。这已经使我避免了我不小心试图将一种指针类型强制转换为另一种指针类型的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)