2011-10-22 3 views
4

char * 유형의 버퍼를 동적으로 할당하고 특정 유형으로 캐스팅하려는 경우reinterpret_cast <int*> (char *) 대 static_cast <int*> (static_cast <void*> (char *)) - 어떤 것을 사용합니까?

reinterpret_cast<int *>(char *) 

또는

static_cast<int *>(static_cast<void *>(char *)) 

와 같은 것을 사용해야합니까?

나에게 개인적으로 후자를 사용하고 싶다. 왜냐하면 나에게 데이터의 "재 해석"(버퍼를 할당하는 기계적인 방법이 아닌)이 될 것이기 때문이다. 전형적인 reinterpret_cast과 같은 방식으로 버그의 근원지가 될 수도 있지만 올바른 직감입니까?

+0

정의되지 않은 동작이므로이 작업을 수행하지 마십시오. –

+0

KerrekSB : 정확히 "이"는 무엇입니까? – Mehrdad

+2

@KerrekSB : 완전히 정의되고 벡터 구현에 사용됩니다 (최소한 sgi 버전). – Dani

답변

4

According to Dave Abrahams을 사용하면 포인터 유형을 강제 변환하는 올바른 표준 방법입니다.

개인적으로는 reinterpret_cast으로 연결되는 static_cast과 다른 것을 연결하는 아키텍처를 다루지 않아도되기 때문에 개인적으로는 reinterpret_cast을 사용합니다.

관련 문제