多重継承を使用すると、スライスによって親オブジェクトへのアドレスが葉オブジェクトへのアドレスとは異なります。
struct X {int x};
struct Y {int y};
struct Z : X, Y {int z};
したがって、Zオブジェクトがある場合z、そのアドレス&zは親のアドレスと一致しません。は より 4 バイト高くなります。Ystatic_cast<Y*>(&z)&z
良い点static_castは、それが静的であるため、ランタイムを占有しないことです(dynamic_castつまり、 と比較して)。ただし、Z*を指すがある場合0、親へのすべてのキャストは null ポインターも生成する必要があります。なぜこれが機能し、どのように実装されるのですか? それは、すべての単一static_castが分岐命令を導入することを意味しますか?