Operátor identifikátor TypeId.
typeid( type-id )
typeid( expression )
Poznámky
typeid Operátor umožňuje typ objektu, stanoví v době spuštění.
V důsledku typeid je btype_info &. Odkaz na hodnotu type_info objekt, který představuje buď id typu nebo typ výrazv závislosti na který tvar typeid se používá.Viz type_info třídy Další informace.
typeid Operátor nepracuje s spravovaných typů (declarators abstraktní nebo instance), viz identifikátor TypeId. informace o získání Type zadaného typu.
typeid Operátor nemá kontrolu spuštění při použití pro hodnotu l typu polymorfní třídy, kde statické informace poskytnuté nezjistitelné true typ objektu.Takové případy jsou:
Odkaz na třídu
Ukazatel s dereferenced *
Nich ukazatel (tj.)[ ]).(Všimněte si, že není obecně bezpečně používat index s ukazatelem polymorfní typu.)
Pokud výraz odkazuje na typ základní třídy, dosud objekt je ve skutečnosti typ odvozený z této základní třídy type_info odkaz pro odvozené třídy je výsledek.Výraz musí odkazovat na polymorfní typ (třída virtuálních funkcí).Jinak je výsledek type_info pro statické třídy podle výraz.Přímo dále ukazatele musí odkázat tak, aby se používá objekt, na který odkazuje.Bez přesměrování ukazatel, výsledek bude type_info ukazatel, není co it odkazuje.Příklad:
// expre_typeid_Operator.cpp
// compile with: /GR /EHsc
#include <iostream>
#include <typeinfo.h>
class Base {
public:
virtual void vvfunc() {}
};
class Derived : public Base {};
using namespace std;
int main() {
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid( pb ).name() << endl; //prints "class Base *"
cout << typeid( *pb ).name() << endl; //prints "class Derived"
cout << typeid( pd ).name() << endl; //prints "class Derived *"
cout << typeid( *pd ).name() << endl; //prints "class Derived"
delete pd;
}
Pokud výraz je ukazatel, přesměrování a hodnota ukazatele je nula, typeid vyvolá bad_typeid výjimku.Pokud ukazatel neodkazuje na platný objekt __non_rtti_object je výjimka, označující pokus analyzovat RTTI, která způsobila chybu (např. porušení přístupu), protože objekt je neplatný nějakým způsobem (Chybný ukazatel nebo kód nebyla kompilována s Parametry kompilátoru /GR).
Pokud výraz ukazatel ani odkaz na základní třídy objektu, výsledek je type_info odkaz představující typ statické výraz.Statického typu výrazu odkazuje na typ výrazu je známa v době kompilace.Sémantika spuštění jsou ignorovány, při hodnocení statického typu výrazu.Navíc jsou odkazy ignorovány, pokud možno při stanovení statického typu výrazu:
// expre_typeid_Operator_2.cpp
#include <typeinfo>
int main()
{
typeid(int) == typeid(int&); // evaluates to true
}
KódTypu lze také použít v šablonách určit typ parametru šablony:
// expre_typeid_Operator_3.cpp
// compile with: /c
#include <typeinfo>
template < typename T >
T max( T arg1, T arg2 ) {
cout << typeid( T ).name() << "s compared." << endl;
return ( arg1 > arg2 ? arg1 : arg2 );
}