내 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
코드가 의미가 없습니다. 왜 패배자인가? –
'intptr_t *'로 변환 할 때주의해야 할 점은 무엇입니까? – GManNickG
@GManNickG :'=='연산자가 필요합니다. 그 캐스트는 그래서 int와 같은 ptr 값을 비교할 수 있습니다. 하지만 ptr 크기는 무엇입니까 (따라서 int *가 아닌 이유) –