문제

그것이 사실입니까? const_cast 컴파일러에게 "신음 소리를 멈추고, 이것을 불신 포인터로 취급"하는 방법일까요? 언제든지 사례가 있습니까? const_cast 그 자체가 실제 기계 코드로 변환됩니까?

도움이 되었습니까?

해결책

아마도, const 포인터가 비 초가의 표현과 다른 표현을 가졌던 아키텍처가있을 수 있으며,이 경우 컴파일러는 일부 코드를 방출해야합니다. 그러나 나는 그러한 아키텍처를 알지 못합니다.

다른 팁

아니요, 컴파일 시간에 const 속성 만 제거합니다.

Const_cast는 단지 속성의 콘트니스를 버리고 더 이상 아무것도 없습니다.

const 유형의 표현, 특히 표현을 변경하지 않습니다. T* 정확히 동일합니다 T const*.

고려하다:

int i, 
    * const cpi = &i,
    * const * pcpi = &cpi;
int const * const * pcpci = pcpi; // cpi is now int const*

표현 cpi 동시에 int* 그리고 a int const* ~을 통해 *pcpci.

표현을위한 방법이 없습니다 cpi 언제 변경합니다 pcpci 초기화됩니다.

물론, 포인터 객체에 유의하지 않은 비트가 있으면 컴파일러는 무작위로 뒤집을 수 있습니다. 특히, const_cast 포인터의 중요하지 않은 비트를 뒤집을 수는 있지만 암시 적 변환도 할 수 있습니다. 나는이 사건이 현실 세계에 존재한다고 생각하지 않습니다.

두 개의 다른 비트 패턴이 동일한 주소 값을 초래할 때도 동일하게 적용됩니다 (오프셋이 충분히 큰 경우 기본+오프셋).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top