Strano comportamento dell'operatore typeid?
Domanda
Utilizzando XCode 3.2.3 (64-bit), ottengo seguente output strano. Che cosa sto facendo di sbagliato?
#include <iostream>
#include <typeinfo>
struct student {
};
int main()
{
int i;
student obj;
std::cout << typeid(i).name() << "\n";
std::cout << typeid(obj).name() << "\n";
return 0;
}
Output:
i
7student
Soluzione
Che cosa sta succedendo è niente di speciale. Solo che typeid
non promette di restituire il nome di "originale" del tipo, ma solo a nome.
La funzione restituisce un implementazione definita ??em> stringa, che, se si è fortunati, è riconoscibile, ma non fa alcuna promessa di questo.
Altri suggerimenti
La funzione membro name()
della struct type_info
è l'attuazione specifica. Non c'è alcuna garanzia che cercherà di restituire qualcosa che corrisponde a ciò che dice nel programma originale. Infatti, lo standard C ++ ISO (18.5.1.7) realtà dice che questa funzione restituisce "L'attuazione definite BNT" (stringa di byte con terminazione null). Se volesse, potrebbe avere questa restituisce sempre la stringa "neener neerer io non vi dico il nome di questo tipo." Questo contrasta con il tipo Class<?>
di Java, che ha restrizioni molto severe su ciò che può e non può tornare.