2d STL矢量typeid

pdm*_*011 1 c++ vector typeid

我有各种2D向量,我想在运行时查询它们的不同类型.

看来这可能在"空"向量上,例如:

vector<vector<float> > myVec;
cout << (typeid(myVec[0][0]).name() << endl;
Run Code Online (Sandbox Code Playgroud)

上面返回"浮动",虽然我期待一个例外,因为我没有推回任何元素.

只是运气,在[0][0]没有任何边界检查或迭代器访问内存时它成功了吗?或者向量在声明时分配一些基线存储?

Jer*_*ock 7

由于float没有任何虚方法,编译器可以typeid(some_float_object)静态计算而不查看实际表达式,只查看其静态类型.根据C++标准的5.2.8节(当前的C++ 0x草案),甚至不允许编译器评估表达式.