2016-10-23 1 views
2

this question을 읽은 후에 dynamic_cast<void*>이 개체 포인터의 실제 ID를 확인하고 모든 기본 포인터가 가장 파생 된 (캐스팅 이후) 것과 똑같이 비교할 수있는 가장 좋은 방법이라는 것을 알고 있습니다.비 다형성 유형의 경우 dynamic_cast <void*>이 작동하도록 보장됩니까? (static_cast <void*>과 같음)?

확실하지 않은 점은이 캐스트가 비 다형성 케이스에서 정의되고 유용한 결과를 제공한다는 것입니다. 그렇지 않다면이 문제를 해결하거나 희망없는 상황입니까? 값, 잘 정의 또는 기타를 생성하지 않습니다 때문에

class A {}; 
class B : public A {}; 

int main() 
{ 
    A a; 
    B b; 
    A* base_ptr = &b; 

    void* pointer = dynamic_cast<void*>(&a); // is this value well-defined? 

    if(dynamic_cast<void*>(&b) == dynamic_cast<void*>(base_ptr)) 
    std::cout << "Is this undefined or not?"; 
} 

답변

3

이 코드 doesn't compile과 :

은 내가 부탁 해요 것은이 잘 정의 된 경우입니다. 그렇지

[expr.dynamic.cast]/6의, v는 포인터 또는 다형성 형태의 glvalue한다 충돌하여이 달린다.

관련 문제