Programing

NULL / 0을 dynamic_cast에 전달하는 것이 이식 가능합니까?

lottogame 2020. 11. 28. 08:34
반응형

NULL / 0을 dynamic_cast에 전달하는 것이 이식 가능합니까?


널 포인터를 확인하는 습관으로 가끔 다음과 같이 작성했습니다.

MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...

실제로 동적 캐스트로 전달하기 전에 널 포인터를 확인하고 리턴도 확인합니다.

그런 다음 MSDN 설명서를 읽었습니다.

null 포인터 값은 dynamic_cast에 의해 대상 유형의 null 포인터 값으로 변환됩니다.

그러면? : 구조를 안전하게 제거 할 수있는 것 같습니다. 이 C ++는 이식 가능 합니까?

새로운 코드는

MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...

물론 someBasePtr 이 null이거나 유효하다고 가정 합니다. 즉, 쓰레기를 가리키는 와일드가 아닙니다 .


§5.2.7 / 4 :

v의 값이 포인터 케이스에서 널 포인터 값이면 결과는 유형 R의 널 포인터 값입니다.

따라서 널 포인터를 직접 확인할 필요가 없습니다. 연산자 삭제도 마찬가지입니다. 널 포인터를 삭제해도 효과가 없습니다.


예, dynamic_cast널 포인터에서 사용할 수 있습니다 .


예, 5.2.7.4를 표준으로 확인하십시오.

참고 URL : https://stackoverflow.com/questions/5155820/portably-safe-to-pass-null-zero-to-dynamic-cast

반응형