2011-08-08 2 views

답변

4

정적 캐스트이므로 컴파일러에서 두 유형의 포인터가 같은지 확인합니다. while(false)은 절대 실행되지 않으며 컴파일 시간에만 사용할 수 있습니다.

+0

아, 멋지다! +1. 나는 그런 것에 대해 결코 아무것도하지 않을 것이다. –

+0

코드가 얼마나 정확하게 작동하는지 설명 할 수 있다면 좋을 것입니다. 특히 포인터를 휘발성으로 만드는 데 영향을 미칩니다. – sepp2k

+0

나는 항상 rinterpret_cast => runtime을 기억해야한다. –

1

S*T*으로 캐스팅 할 수 있는지 정적으로 검사합니다. 런타임에는 코드가 실행되지 않습니다. 나는 volatile이 컴파일러가 코드를 무시하도록하는 최적화를 방해한다고 생각합니다.

+0

최적화는 컴파일러가 코드를 완전히 무시하는 것을 허용하지 않을 것이다. 컴파일러가 최적화되지 않았는지 여부에 관계없이 여전히 유효하지 않은 코드를 진단해야하기 때문입니다. 나는'volatile '이 NULL 포인터가 참조 해제되었다는 경고를 일부 컴파일러에서 보지 못하도록하는 것으로 의심한다. 글쎄, 그것은 표현이 평가되지 않았기 때문에가 아니라 표현이 그것을 행한다고 말한다. 내가 옳다면 '휘발성'은 "사용자가 자신이하고있는 일을 알고 있다고 생각하는 것 같고 실제로 null 포인터를 역 참조하기를 원하므로 경고하지 마라"는 뜻입니다. –

-1

유형을 형 변환 할 수없는 경우 컴파일되지 않습니다. 그러나 결코 실행되지 않습니다.

0

코드에서 S *를 T *에 할당 할 수 있는지 확인하고 컴파일 할 수없는 경우 컴파일 오류가 발생하는지 확인합니다. 휘발성에 관해서 나는 확실하지 않다.