Domanda
Ho vari vettori 2D e voglio interrogare i loro diversi tipi in fase di esecuzione.
Sembra che questo sia possibile su un vettore "vuoto", ad esempio.:
vector<vector<float> > myVec;
cout << (typeid(myVec[0][0]).name() << endl;
.
Quanto sopra ritorna "Float" sebbene mi aspettassi un'eccezione in quanto non ho spinto indietro gli elementi.
È solo fortuna che quando si accede alla memoria a [0][0]
senza alcun controllo dei limiti o Iteratore è successo?O il vettore alloca alcuni stoccaggio di base quando è dichiarato?
Soluzione
Since float
does not have any virtual methods, the compiler can evaluate typeid(some_float_object)
statically without looking at the actual expression, just its static type. According to section 5.2.8 of the C++ standard (current C++0x draft), the compiler is not even allowed to evaluate the expression.