Attach2010.08.18 15:17

방금 전에 IRC 모 채널에서 있었던 대화.

<飛_______> reinterpret_cast 랑 static_cast 의 차이를 잘 모르겠어요
<ri_______> 상속관계가 얽혀있을때 다름
<ri_______> (포인터경우)
<ri_______> 그리고 int를 float으로 의미보존하면서 옮기는것도 스태틱캐스트임
<ri_______> (1 -> 1.0)
<ri_______> 리인터프릿하면..되긴 하나? 여튼 메모리 표현을 보존하는게 리인터프릿이고, 스태틱은 의미 보존임...
<ri_______> 스태틱은 리인터프릿하고 비교해서 이름을 해석하면 이상한데
<ri_______> 스태틱 <-> 다이나믹 이렇게 보면 됨
<ri_______> 의미보존하는 캐스트들...
<ri_______> 그래서 대표적인게.. class A, B가 상속관계에 있지 않은 타입일때 서로 스태틱 캐스트가 안됨
<ri_______> 의미를 보존하는게 불가능한 변환이기 땜시..
<ri_______> 하지만 상속관계에 있는 타입일 경우 스태틱 캐스트를 해줌. 이때 리인터프릿 캐스트와 다른점은....
<ri_______> 다중상속인 경우, 의미를 보존하면서 캐스트하려면 포인터 위치가 바뀌는 경우가 있심
<ri_______> 즉 메모리상의 이진표현이 바뀐다는
<ri_______> 리인터프릿캐스트하면 이진표현은 그대로임

reinterpret_cast : 메모리표현(binary representation) 보존
static_cast : 의미(semantics) 보존

맨날 깅가밍가했었는데 적절한 표현으로 인해 한번에 머리 속에 박혀버렸군요. :)


Posted by 飛烏