>>210
多重継承してるときに、オフセットの調整するかどうかじゃないの?

class B1 { int b1; };
class B2 { int b2; };
class D : public B1, public B2 {};

D* pd = new D;
B2* pb = bd;

こうすると pd と pb は、それぞれ「D オブジェクトの先頭 (= B1 オブジェクトの先頭)」
「D オブジェクト中にある B2 オブジェクトの先頭」を指すよね。

  pd-> +------------
      | int b1;
  pb-> +------------
      | int b2;
      +------------

当然、アドレス値としては pd != pb になる。このときに

1. static_cast<D*>(pb) するとオフセット分だけ差し引いて pd と同じアドレスが返ってくる
2. reinterpret_cast<D*>(pb) すると pb のアドレスが、そのまま返ってくる
  (規格上は実装依存だけど、たいていの処理系だとこうなる)

と、結果が違ってくる。