|
ㄴ('')ㄱ 님이 쓰신 글 :
: c++ 빌더를 공부하기 시작한 초보입니다...
: 근데 공부하는 중에... 너무너무 궁금한게.. 몇가지 생겼어요...
:
:
: TStringList 하고 TList는 머가 틀리죠?
TStringList는 AnsiString의 리스트고요,
TList는 void*의 리스트입니다.
그러니까 어떤 객체의 포인터도 대입해서 리스트를 만들 수 있지요.
단 매번 사용할 때마다 객체의 메모리를 할당하고 해제해야 하며,
원래 객체의 포인터로 캐스팅을 해야하기
때문에 코드도 지저분해지고, 실수할 가능성도 높습니다.
개인적으로는 STL의 list나 vector등을 쓰시는 것을 추천합니다.
: variant는 어떤 타입을 받아들일수도 있고, 어떤 타입으로도 표현될수 있다고 들었어요
: 그 내부구조 알수 없을까요?
내부구조까지는 정확히는 모르겠구요(알 필요도 없습니다.).
variant라는 것은 (비쥬얼)베이직을 써 보신 분은 잘 아실 겁니다.
원래 인터프리터 언어인 베이직은 명시적으로 타입을 선언하지 않고도
변수를 쓸 수 있는데, 이 때의 타입이 variant입니다.
그러나 이렇게 명시적으로 타입을 선언하지 않고 변수를 아무렇게나 대입해서
쓰게 되면 속도도 느려질 뿐만 아니라, 골치아픈 버그가 생기게 되기 마련이지요.
(앞의 TList 설명에서 void*를 다룰 때 생길 수 있는 버그와도 비슷한 맥락이지요.)
variant는 OLE Automaton을 다룰 때 빼고는 절대 쓰지 않는 것이 좋습니다.
비쥬얼 베이직을 최우선시하는 M$ 때문에 할 수 없이 다른 언어에서도 OLE를 쓰기 위해
variant를 도입하게 된 겁니다.
: currency 는 도대체 어떻게 구현이 되어있길래 19자리~ 20자리 수까지도 표현이 가능
: 한거죠?
Currency는 소수점이 4자리로 고정된 실수입니다. 사실상 정수형 타입이죠.
즉, __int64 (델파이에서는 Int64)라는 64비트 정수형을 변환한 타입입니다.
2^64 = 1.8E19 가 되므로 십진수로는 19~20자리 수까지 표현되는 겁니다.
:
: 아시는분 꼭좀 가르쳐주세요.....
|