次のC++コードが動作することが保証されているかどうか疑問に思っています:
struct B1 {
virtual void f() {};
};
struct B2 {
virtual void f2() {};
};
struct D:public B1,public B2 {
};
int main() {
D d;
B1 *b1=&d;
if (dynamic_cast<B2*>(b1)) {
B2* b2 = reinterpret_cast<B2*>(b1); //is this conversion valid?
};
return 1;
};
もちろん、なぜこれが必要なのですか?これを置き換えたいので:
C::C(B1* b): member(dynamic_cast<B2*>(b)?dynamic_cast<B2*>(b)->m():b) {};
より良い構造で(型の安全性を2回チェックしないように、パフォーマンスによって):
C::C(B1* b): member(dynamic_cast<B2*>(b)?reinterpret_cast<B2*>(b)->m():b) {};
前もって感謝します!