반응형
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
반응형
'Programing' 카테고리의 다른 글
SVN-재 통합 병합 오류 : "조상과 관련이 있어야 함" (0) | 2020.11.28 |
---|---|
"어셈블리"대 "어셈블러" (0) | 2020.11.28 |
Objective-C in, out, inout, byref, byval, .. 등등. (0) | 2020.11.28 |
BSTR에서 std :: string (std :: wstring)으로 또는 그 반대로 (0) | 2020.11.28 |
git 저장소 이동 (0) | 2020.11.28 |