1

重複の可能性:
c スタイルのキャストと reinterpret_cast の比較

違いは何ですか:

A* pA = new B;

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

どちらも同じことを行う同じ方法ですか?どちらかを選択する理由はありますか?C++コードでは「Cスタイル」のキャストを避けるべきですか?

4

1 に答える 1

8

C スタイルのキャストは、次のうち最初に成功したものと同等です。

  • aconst_cast
  • astatic_cast
  • static_cast続くconst_cast
  • areinterpret_cast
  • reinterpret_cast続くconst_cast

したがって、特定の状況では、C スタイルのキャストは と同じ効果がありますが、reinterpret_cast同等ではありません。C スタイルのキャストは基本的に「ああ、できる限りキャストする」キャストであるため、より具体的なキャストを優先することをお勧めします。

あなたの例ではstatic_cast、派生オブジェクトの実際の型がわかっているため、 a を使用することをお勧めします。そうでない場合は、 を使用しますdynamic_cast

于 2012-12-19T20:53:09.623 に答える