Sdílet prostřednictvím


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 );
}

Viz také

Referenční dokumentace

Informace o typu Run-Time

Klíčových slov jazyka C++