11

例:

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

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

&c と b の値を確認すると、b はメモリ内で a の後にあるため、それらは異なりますが、&c==b を評価すると同じになります。なぜですか?

4

1 に答える 1

13

&c == bでは、両方のオペランドを同じ型に強制変換する必要があります。この場合&c、(a )はアクセス可能な基本クラスのとしてC*変換できます。これはで発生するのとまったく同じ変換であるため、結果の値は同じであり、比較はtrueを返します。B*BCB* b = &c

于 2012-10-15T07:08:52.663 に答える