有什么区别:
A* pA = new B;
B* p1 = (B*)pA;
B* p2 = reinterpret_cast<B*>(pA);
他们是否都采用相同的方式做同样的事情?有没有理由选择一个而不是另一个?是否应该在C ++代码中避免“C风格”演员?
答案 0 :(得分:7)
C风格的演员表相当于以下第一个成功:
const_cast
static_cast
static_cast
后跟const_cast
reinterpret_cast
reinterpret_cast
后跟const_cast
因此,在某些情况下,C风格的演员阵容与reinterpret_cast
具有相同的效果,但它们并不相同。由于C风格的演员阵容基本上是“哦,只是你可以施展”,所以最好选择更具体的演员阵容。
对于您的示例,最好使用static_cast
,因为您知道派生对象的实际类型。如果不这样做,请使用dynamic_cast
。