2011-12-19 4 views

답변

4

이 NULL 참조 :

+0

사실 null 참조가있을 수 있습니다! – Nawaz

+1

이 코드는 컴파일되지만 정의되지 않은 동작이 발생합니다 :'int & i = * ((int *) 0);'. 'dyanmic_cast'가 캐스트의 끝점으로 유효하지 않은 타입이 선택되었을 때, 정의되지 않은 동작을 발생시키는 것은 잘못된 것입니다. 그래서 예외를 던지게됩니다. 이것은 잘 정의 된 동작입니다. :-) – Omnifarious

+0

그래, 나는 여기에 높은 수준의 이유를 더 많이 찾고 있었다. 제임스 Kanze는 그것을 아주 요약했다. 참조 할 객체가없는 참조를 초기화 할 수 없다. – ScarletAmaranth

3

이 사실 (또는 오히려 null로 참조) null 참조가있을 수 같은 것은 없지만, 그것은 정의되지 않은 동작 (UB)이기 때문입니다. 표준은 UB를 정의하지 않으므로 dynamic_cast은 예외를 던집니다. 이것은 꽤 잘 정의되어 있습니다.

+0

Im 다음과 같지 않음 :) 설명해주세요 :) – ScarletAmaranth

+0

NULL에 대한 참조 형식은'int const &'입니다 만, 나는 이것이 당신이 의미하는 것이라고 생각하지 않습니다. 그러나 참조 할 수있는 유효한 객체가없는 참조는 초기화 할 수 없습니다. –

+1

@JamesKanze : 그것이 내 뜻입니다. – Nawaz

관련 문제