2011-02-18 46 views
1

我有各種2D矢量,我想在運行時查詢它們的不同類型。2d STL vector typeid

看來這有可能在一個「空」載體,例如:

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

以上的回報「浮動」雖然我在等一個例外,因爲我已經不推回的任何元素。

難道只是運氣訪問內存時[0][0]沒有任何邊界檢查或迭代器它成功?或者,矢量在聲明時是否分配一些基線存儲?

回答

7

由於float沒有任何虛擬方法,因此編譯器可以靜態評估typeid(some_float_object)而無需查看實際表達式,僅查看其靜態類型。根據C++標準的第5.2.8節(當前的C++ 0x草案),甚至不允許編譯器評估表達式。

+0

很好的答案,謝謝。 – pdm2011 2011-02-18 18:45:53