1

可能重复:
c-style cast vs reinterpret_cast

有什么区别:

A* pA = new B;

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

他们都是做同一件事的相同方式吗?有什么理由选择一个而不是另一个吗?是否应该在 C++ 代码中避免“C 风格”转换?

4

1 回答 1

8

C 风格的强制转换等价于以下成功的第一个:

  • 一种const_cast
  • 一种static_cast
  • 一个static_cast接着const_cast
  • 一种reinterpret_cast
  • 一个reinterpret_cast接着const_cast

因此,在某些情况下,C 风格的演员表将具有相同的效果,reinterpret_cast但它们并不等效。由于 C 风格的演员表基本上是“哦,随便你怎么做”演员表,最好选择更具体的演员表。

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

于 2012-12-19T20:53:09.623 回答