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