私の関数では、両方のポインターが同じタイプのオブジェクトを指している場合IsSame
に戻りたいと思います。したがって、中間呼び出しのみが返されます。同じと見なされるべきではありません。true
true
D1
B
以下はまさに私が欲しいもののようですが、標準によれば安全ですか?
#include <stdio.h>
class B { virtual void foo() {} };
class D1 : public B { };
class D2 : public B { };
class D3 : public B { };
bool IsSame(B*a, B*b) {
if (a == 0 || b == 0)
return false;
return *(intptr_t*)a == *(intptr_t*)b;
}
int main() {
D1 d1;
D2 d2;
D1 d1b;
B b;
printf("%d %d %d\n", IsSame(&d1, &d2), IsSame(&d1, &d1b), IsSame(&d1, &b));
}
出力:
0 1 0