有什么区别:
A* pA = new B;
B* p1 = (B*)pA;
B* p2 = reinterpret_cast<B*>(pA);
他们都是做同一件事的相同方式吗?有什么理由选择一个而不是另一个吗?是否应该在 C++ 代码中避免“C 风格”转换?
有什么区别:
A* pA = new B;
B* p1 = (B*)pA;
B* p2 = reinterpret_cast<B*>(pA);
他们都是做同一件事的相同方式吗?有什么理由选择一个而不是另一个吗?是否应该在 C++ 代码中避免“C 风格”转换?
C 风格的强制转换等价于以下成功的第一个:
const_cast
static_cast
static_cast
接着const_cast
reinterpret_cast
reinterpret_cast
接着const_cast
因此,在某些情况下,C 风格的演员表将具有相同的效果,reinterpret_cast
但它们并不等效。由于 C 风格的演员表基本上是“哦,随便你怎么做”演员表,最好选择更具体的演员表。
对于您的示例,最好使用 a ,static_cast
因为您知道派生对象的实际类型。如果不这样做,请使用dynamic_cast
.