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
È stato utile?

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 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.

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