違いは何ですか:
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 スタイルのキャストは基本的に「ああ、できる限りキャストする」キャストであるため、より具体的なキャストを優先することをお勧めします。
あなたの例ではstatic_cast
、派生オブジェクトの実際の型がわかっているため、 a を使用することをお勧めします。そうでない場合は、 を使用しますdynamic_cast
。