※ 아무 문제 없는거다. 그냥 알고있으라고 적는다. -ㅁ-



해쉬맵은 해쉬키를 가지고 검색을 한다.



이 해쉬키의 타입은 바로 바로 바로 size_t 형이다.



아래를 보자



사용자 삽입 이미지


 

hash_map 에서 발췌한 내용이다. hash_value 함수는 size_t 형을 리턴한다.

 

그리고 주목할점은 key값을 size_t 로 캐스팅한다는 것이다. 허걱 허걱.. ㅠ_ㅠ;

 

오늘 UINT64 를 키값으로 두고 작업을 진행하는중 런 타임 체크 에러가 발생해서 찾다가

 

알아낸 내용이다. 위 상황에서는 UINT64를 size_t형으로 강제 캐스팅을 한다.

 

UINT64 = 0xFFFFFFFFFFFFFFFF 과

DWORD = 0XFFFFFFFF 을 size_t 형으로 캐스팅시 동일한 값이 출력된다.

 

여기서 문제가 발생하는 경우는

 

런 타임 체크 설정사항에서 더 작은 캐스팅으로 검사하는 부분을 On 시켰을때다 해당 기능이 On

 

되어있으면 윗 부분에서 런타임 체크 에러가 발생한다.(이 런타임체크는 Debug 모드일때만 동작함)

 

 

실제 hash_map 동작에서 해쉬키값을 구했다고 바로 그 반복자를 리턴하는게 아니고 반복자의 first와

 

키값을 비교해서 동일하면 리턴한다.

 

결과는 정상적으로 잘 동작한다는 말이 되겠다. (디버그 모드에서는 위에 런타임체크사항을 off해야

 

되는데.. off하고 싶을 프로그래머가 있을려나?? -ㅁ-)

 

http://msdn2.microsoft.com/ko-kr/library/8wtf2dfz(VS.80).aspx

Post to Twitter