Const_cast는 실제 코드 배출을 일으킨 적이 있습니까?
-
09-09-2019 - |
문제
그것이 사실입니까? 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
포인터의 중요하지 않은 비트를 뒤집을 수는 있지만 암시 적 변환도 할 수 있습니다. 나는이 사건이 현실 세계에 존재한다고 생각하지 않습니다.
두 개의 다른 비트 패턴이 동일한 주소 값을 초래할 때도 동일하게 적용됩니다 (오프셋이 충분히 큰 경우 기본+오프셋).
제휴하지 않습니다 StackOverflow