reinterpret_cast vs c style cast

时间:2012-12-19 20:50:29

标签: c++

  

可能重复:
  c-style cast vs reinterpret_cast

有什么区别:

A* pA = new B;

B* p1 = (B*)pA;
B* p2 = reinterpret_cast<B*>(pA);

他们是否都采用相同的方式做同样的事情?有没有理由选择一个而不是另一个?是否应该在C ++代码中避免“C风格”演员?

1 个答案:

答案 0 :(得分:7)

C风格的演员表相当于以下第一个成功:

  • a const_cast
  • a static_cast
  • 一个static_cast后跟const_cast
  • a reinterpret_cast
  • 一个reinterpret_cast后跟const_cast

因此,在某些情况下,C风格的演员阵容与reinterpret_cast具有相同的效果,但它们并不相同。由于C风格的演员阵容基本上是“哦,只是你可以施展”,所以最好选择更具体的演员阵容。

对于您的示例,最好使用static_cast,因为您知道派生对象的实际类型。如果不这样做,请使用dynamic_cast