2d STL векторный typeid - PullRequest
       7

2d STL векторный typeid

1 голос
/ 18 февраля 2011

У меня есть различные 2D-векторы, и я хочу запросить их различные типы во время выполнения.

Похоже, это возможно для «пустого» вектора, например:

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

возвращает «float», хотя я ожидал исключения, так как я не сдвинул назад никаких элементов.

Это просто удача, что при доступе к памяти на [0][0] без какой-либо проверки границ или итератора это удается?Или вектор выделяет некоторое базовое хранилище, когда оно объявлено?

1 Ответ

7 голосов
/ 18 февраля 2011

Поскольку float не имеет никаких виртуальных методов, компилятор может оценивать typeid(some_float_object) статически, не глядя на фактическое выражение, только на его статический тип.Согласно разделу 5.2.8 стандарта C ++ (текущий черновик C ++ 0x), компилятору даже не разрешается вычислять выражение.

...