2012-10-15 5 views
10

例派生対ベースのポインタ比較:私は& CとBの値をチェックするとき、Bがメモリ内の後であるので、それらが異なるC++:同じオブジェクトの

class A{ 
    int x; 
}; 
class B{}; 
class C : public A, public B {}; 

C c; 
A* a = &c; 
B* b = &c; 

を、まだときに、私は& c == bと評価する、それらは同じです、どうしてなぜですか?

+1

同じオブジェクトの異なる部分を指しているため、値が異なります。しかし、同じタイプを指すようにそれらを変換すると、それらは同じになります。 –

+1

このコードはコンパイルされません。 '&c'はポインタへの参照ですが、' a'と 'b'はポインタです。 –

+0

申し訳ありませんが、私は最初はオブジェクトとしてcを持っていましたが、それを明確化のためのポインタにしようとしましたが、残りの部分を変更するのを忘れました.... – godlamp

答えて

12

&c == bでは、両方のオペランドを同じ型に強制する必要があります。この場合&cC*)はB*に変換できます。BCのアクセシブルベースクラスです。これは、B* b = &cの場合とまったく同じ変換であるため、結果の値は同じであり、比較結果はtrueを返します。

+1

素敵な説明、卿 – WhozCraig

関連する問題