2012-10-08 3 views
0

const unsigned int* 배열을 int* 배열로 캐스팅하고 싶습니다. 그러나 static_castconst_cast은 실패합니다.const unsigned int 배열을 int 배열로 캐스팅하는 방법

const unsigned int* getArray() 
{ 
    static unsigned int a[3]; 
    a[0] = 0; 
    a[1] = 1; 
    a[2] = 2; 
    return a; 
} 
int main() 
{ 
    const unsigned int * a = getArray(); 
    const_cast<int*>(a); // fail 
    static_cast<int*>(a); // fail 
} 
+0

이 실제 코드인가요? 'getArray'는'return' 문조차 가지고 있지 않습니다. 그 외에도 지역 변수의 주소를 반환하는 것은 (의도 한 것처럼) 나쁜 소식입니다. –

+0

@CarlNorum'getArray()'는 내가 제어 할 수없는 큰 라이브러리에 대한 호출을 대체하기위한 것입니다. - 원시 포인터를 전달하는 것이 좋지 않다는 것에 동의합니다. –

+0

주위에 포인터를 전달하는 것이 좋습니다. 지역 변수에 대한 포인터를 반환하는 것은 아닙니다. 왜 '정적'으로'a'를 선언하지 않는가? 그러면 올바른 것이며 미래의 독자를 혼란스럽게하지 않을 것입니다. –

답변

2
  1. const_cast는 유형, 단지 const 다움을 변경할 수 없습니다.
  2. static_castconst을 제거 할 수 없으며 해당 포인터 유형간에 변경할 수 없습니다.

당신이 원하는 것처럼 외모 무엇 :

int *b = reinterpret_cast<int *>(const_cast<unsigned int *>(a)); 

은 또한 단지이 경우에는 C 스타일 캐스트를 사용할 수 있습니다

int *b = (int *)a; 
+0

그래서이 둘을 연결하면 효과가 있을까요? 이'int * c = static_cast (b); '동안이'unsigned int * b = const_cast (a);'적어도 const를 던져 버린다. 나는 그 질문에 적응할 것이다. –

+0

아니요, 'static_cast'로 포인터 유형을 변경할 수도 없습니다. 편집 중. –