2011-08-30 4 views
15

내가 읽은 바에 따르면, 잘못된 런타임 dynamic_cast를 수행하면 bad_cast 예외를 던지거나 0을 반환 할 수 있습니다.dynamic_cast는 어떻게 실패합니까?

포인터를 캐스팅하는 경우 0을 반환한다고 말하는 것이 맞습니까?

즉 :

class Base { virtual void a(){} }; 
class Derived: public Base {}; 

int main() { 
    Base *base = new Base(); 
    dynamic_cast<Derived*>(base); 
    return 0; 
} 

와 개체를 캐스팅 할 때이 bad_cast 예외를 던질 것?

즉 :

class Base { virtual void a(){} }; 
class Derived: public Base {}; 

int main() { 
    Base base; 
    Base& ref = base; 
    dynamic_cast<Derived&>(ref); 
    return 0; 
} 

답변

26

dynamic_cast 당신이 포인터를 캐스팅하는 경우 나쁜 캐스트에 NULL을 반환합니다; 캐스팅시 std::bad_cast을 던질 것입니다. 참조. 개체를dynamic_cast (예 : dynamic_cast<Derived>(base))

+0

으로 캐스팅하려고하면 컴파일 타임 오류가 발생하므로 확인이 올바른 것입니다. 감사. 기본 클래스를 다형성 (가상 함수 추가)하고 예외 캐스팅을 사용하여 예외를 던지기 위해 메시지를 편집했습니다. – NIGO