可能的重复:
c 风格强制转换与reinterpret_cast https://stackoverflow.com/questions/8427107/c-style-cast-vs-reinterpret-cast
有什么区别:
A* pA = new B;
B* p1 = (B*)pA;
B* p2 = reinterpret_cast<B*>(pA);
它们做同一件事的方法是否相同?有什么理由选择其中之一而不是其他吗?在 C++ 代码中是否应该避免“C 风格”强制转换?
C 风格强制转换相当于以下第一个成功的转换:
- a
const_cast
- a
static_cast
- a
static_cast
其次是const_cast
- a
reinterpret_cast
- a
reinterpret_cast
其次是const_cast
因此在某些情况下,C 风格的强制转换将具有与reinterpret_cast
但它们并不等同。由于 C 风格的演员基本上是“哦,尽你所能”的演员,所以最好选择更具体的演员。
对于您的示例,最好使用static_cast
因为您知道派生对象的实际类型。当你不这样做时,使用dynamic_cast
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)