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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top