나는 모든 다음 괜찮 할 경우static_cast 무효 * static_cast 무효 대 숯불 * ** 문자 **
char* cp = "abc";
void* vp = NULL;
vp = static_cast<void*>(cp);//ok
cp = static_cast<char*>(vp);//ok
그러나 다음이되지 않습니다 :
char** cpp = &cp;
void** vpp = NULL;
vpp = static_cast<void**>(cpp);//error C2440: 'static_cast':
//cannot convert from 'char **' to 'void **'
cpp = static_cast<char**>(vpp);//error C2440: 'static_cast':
//cannot convert from 'void **' to 'char **'
누군가가 설명 할 수주십시오 왜 두 번째 예제는 허용되지 않습니다. C++ 표준을 전체 답으로 인용하지 마십시오. 이미 인용 한 답변을 보았 기 때문에 C++ 표준의 의미를 이해할 수 없습니다. 내가 이해하고 싶습니다 왜 두 번째 예제가 작동하지 않습니다 (즉, 큰 도움이 될 위험이있는 예제를 줄 수있는 경우). 왜냐하면 나는 그것을 얻지 못하기 때문입니다. 나에게 두 예제 모두 포인터를 캐스팅하는 것이다. 간접 지정의 추가 수준으로 인해 차이가 나는 이유는 무엇입니까?
암시 적으로 포인터를 'void *'로 변환하고 역방향으로 정적 캐스트 할 수 있습니다. 그러나 이것은 일반적으로 관련이없는'T *'와'U *'에 대해서는 사실이 아닙니다. (이제'T = char *'와'U = void *'를 생각해보십시오.) –
'char **'를'void *'에 캐스팅 할 수 있고 그 반대도 가능합니다. –
@Kerrek SB - 네,하지만 왜 이것이 허용되지 않습니까? 언제 이것이 안전하지 않습니까? – e244