2013-07-25 2 views
2

다음과 같은 구식 캐스트에 대해 명명 된 형형 상식은 무엇입니까?C++ 명명 된 형형 상응은 무엇입니까

const string *ps; 
void *pv; 

pv = (void*)ps; // <--- this 

pv = static_cast<void*>(const_cast<string*>(ps));입니까?

+0

예. 이제 단 하나의 '예'로 대답하는 똑똑한 엉덩이를 기다리십시오. 또는'const_cast (static_cast (ps))'으로 재 배열 한 사람. 편집 : 나는이 행동 hipsterdom 주장하고있다. – user

+4

''pv = const_cast (ps);'로 충분하다고 생각합니다. –

+0

컴파일러에게 묻지 않으시겠습니까? – Wacek

답변

7
pv = const_cast<string *>(ps); 

는 충분 - void *은 어떤 (비공 인) 데이터 (객체) 포인터 유형에서 암시 적으로 할당합니다.

(물론, 같은 이유로, 작동하는 어떤 주조없이 const void *에 직접 할당.에 대한)

+0

"void *는 모든 데이터 (객체) 포인터 유형에서 암시 적으로 할당 가능합니다"그런 다음'pv = ps'를 직접 사용하지 않는 이유는 무엇입니까? –

+0

@LuchianGrigore'void *'는'const'-qualified가 아니기 때문에. 'const void *'에 대한 직접적인 할당이 효과적이다. 너 해봤 니? 그렇지 않다면, 당신이 그렇게하도록 권하고, 나는 단지 그것을 시도하고 여기서 설명한대로 모든 것이 작동합니다. –

+0

나도 알아,하지만 당신은 "void *는 암시 적으로 어떤 데이터 (객체) 포인터 유형에서도 할당 가능하다"고 말했습니까? –

관련 문제