캐스트에 포인터가 포함되어 있으면 NULL
으로 평가되지만 캐스트에 참조 유형이 포함되어 있으면 bad_cast
예외가 발생합니다.캐스트가 실패 할 때 C++ dynamic_cast 비헤이비어
왜 이러한 동작의 차이가 있습니까?
감사
캐스트에 포인터가 포함되어 있으면 NULL
으로 평가되지만 캐스트에 참조 유형이 포함되어 있으면 bad_cast
예외가 발생합니다.캐스트가 실패 할 때 C++ dynamic_cast 비헤이비어
왜 이러한 동작의 차이가 있습니까?
감사
이 NULL 참조 :
이 사실 (또는 오히려 null로 참조) null 참조가있을 수 같은 것은 없지만, 그것은 정의되지 않은 동작 (UB)이기 때문입니다. 표준은 이 UB를 정의하지 않으므로 dynamic_cast
은 예외를 던집니다. 이것은 꽤 잘 정의되어 있습니다.
Im 다음과 같지 않음 :) 설명해주세요 :) – ScarletAmaranth
NULL에 대한 참조 형식은'int const &'입니다 만, 나는 이것이 당신이 의미하는 것이라고 생각하지 않습니다. 그러나 참조 할 수있는 유효한 객체가없는 참조는 초기화 할 수 없습니다. –
@JamesKanze : 그것이 내 뜻입니다. – Nawaz
사실 null 참조가있을 수 있습니다! – Nawaz
이 코드는 컴파일되지만 정의되지 않은 동작이 발생합니다 :'int & i = * ((int *) 0);'. 'dyanmic_cast'가 캐스트의 끝점으로 유효하지 않은 타입이 선택되었을 때, 정의되지 않은 동작을 발생시키는 것은 잘못된 것입니다. 그래서 예외를 던지게됩니다. 이것은 잘 정의 된 동작입니다. :-) – Omnifarious
그래, 나는 여기에 높은 수준의 이유를 더 많이 찾고 있었다. 제임스 Kanze는 그것을 아주 요약했다. 참조 할 객체가없는 참조를 초기화 할 수 없다. – ScarletAmaranth