다음과 같은 구식 캐스트에 대해 명명 된 형형 상식은 무엇입니까?C++ 명명 된 형형 상응은 무엇입니까
const string *ps;
void *pv;
pv = (void*)ps; // <--- this
pv = static_cast<void*>(const_cast<string*>(ps));
입니까?
다음과 같은 구식 캐스트에 대해 명명 된 형형 상식은 무엇입니까?C++ 명명 된 형형 상응은 무엇입니까
const string *ps;
void *pv;
pv = (void*)ps; // <--- this
pv = static_cast<void*>(const_cast<string*>(ps));
입니까?
pv = const_cast<string *>(ps);
는 충분 - void *
은 어떤 (비공 인) 데이터 (객체) 포인터 유형에서 암시 적으로 할당합니다.
(물론, 같은 이유로, 작동하는 어떤 주조없이 const void *
에 직접 할당.에 대한)
"void *는 모든 데이터 (객체) 포인터 유형에서 암시 적으로 할당 가능합니다"그런 다음'pv = ps'를 직접 사용하지 않는 이유는 무엇입니까? –
@LuchianGrigore'void *'는'const'-qualified가 아니기 때문에. 'const void *'에 대한 직접적인 할당이 효과적이다. 너 해봤 니? 그렇지 않다면, 당신이 그렇게하도록 권하고, 나는 단지 그것을 시도하고 여기서 설명한대로 모든 것이 작동합니다. –
나도 알아,하지만 당신은 "void *는 암시 적으로 어떤 데이터 (객체) 포인터 유형에서도 할당 가능하다"고 말했습니까? –
예. 이제 단 하나의 '예'로 대답하는 똑똑한 엉덩이를 기다리십시오. 또는'const_cast (static_cast (ps))'으로 재 배열 한 사람. 편집 : 나는이 행동 hipsterdom 주장하고있다. –
user
''pv = const_cast (ps);'로 충분하다고 생각합니다. –
컴파일러에게 묻지 않으시겠습니까? – Wacek