2011-02-18 4 views
1

다양한 2D 벡터가 있고 런타임에 서로 다른 유형의 쿼리를 수행하려고합니다.2d STL vector typeid

vector<vector<float> > myVec; 
cout << (typeid(myVec[0][0]).name() << endl; 

위의 반환 "부동"내가 어떤 요소를 다시 밀어 적이 없다 나는 예외를 기대되었지만 : 예컨대,에 "빈"벡터에 가능하다 나타납니다.

범위 검사 또는 반복기없이 메모리를 액세스 할 때 성공할 수 있습니까? 또는 벡터가 선언 될 때 기준 저장소를 할당합니까?

답변

7

float에는 가상 메소드가 없으므로 컴파일러는 typeid(some_float_object)을 정적으로 평가할 수 있습니다. 실제 형식은 정적 유형입니다. C++ 표준 (현재 C++ 0x 초안)의 섹션 5.2.8에 따르면 컴파일러는 표현식을 평가할 권한조차 없습니다.

+0

좋은 답변입니다. 감사합니다. – pdm2011