Udostępnij za pośrednictwem


Operator TypeID

typeid( type-id )
typeid( expression )

Uwagi

typeid Operatora pozwala typ obiektu, które zostaną określone w czasie wykonywania.

Wynik typeid jest consttype_info &. Wartość jest odwołaniem do type_info obiekt, który reprezentuje, albo identyfikator typu lub typu wyrażenie, w zależności od formę, która typeid jest używana.Zobacz type_info klasy Aby uzyskać więcej informacji.

typeid Operator nie działa z typów zarządzanych (declarators abstrakcyjna lub wystąpień), zobacz TypeID Aby uzyskać informacje dotyczące uzyskiwania Type określonego typu.

typeid Jest operator wyboru run-time, gdy jest stosowany do wartości l typu klasy polimorficzna gdzie true type obiektu nie można określić statyczne informacje dostarczone.Takie przypadki są:

  • Odwołanie do klasy

  • Wskaźnik, usunąć odwołania z *

  • Jako wskaźnik (tj.[ ]).(Należy zauważyć, że ogólnie nie jest bezpieczne za pomocą wskaźnika typu polimorficzna indeks dolny).

Jeśli wyrażenie wskazuje typ klasy podstawowej, jeszcze obiektu jest faktycznie typu pochodną klasy bazowej, type_info orzeczenia w klasie pochodnej jest wynikiem.Wyrażenie muszą odnosić się do typu polimorficzna (klasa funkcje wirtualnych).W przeciwnym razie wynikiem jest type_info dla klas statycznych, o których mowa w wyrażenie.Ponadto wskaźnik musi można usunąć odwołania, tak, aby obiekt, który wskazuje na jest używane.Bez cofając wskaźnik, wynik będzie type_info dla wskaźnika, nie to może wskazuje.Na przykład:

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

Jeśli wyrażenie jest cofając wskaźnik, i że jego wartość wynosi zero, typeid wyrzuca wyjątek bad_typeid.Jeśli kursor nie wskazuje na prawidłowy obiekt __non_rtti_object jest wyjątek, wskazując próba RTTI, który wywołał błąd analizowania (np. naruszenie dostępu), ponieważ obiekt jakoś jest nieprawidłowy (zły wskaźnik lub kod nie został skompilowany z się przełączników /GR).

Jeśli wyrażenie jest odwołanie do obiektu, klasa podstawowa ani wskaźnik jest wynikiem type_info odwołanie reprezentującego statyczne typu wyrażenie.Statyczne typu wyrażenia odwołaniem do typu wyrażenia są znane w czasie kompilacji.Semantyka wykonanie są ignorowane przy ocenie statyczne typu wyrażenia.Ponadto odwołania są ignorowane, gdy to możliwe przy określaniu statyczne typu wyrażenia:

// expre_typeid_Operator_2.cpp
#include <typeinfo>

int main()
{
   typeid(int) == typeid(int&); // evaluates to true
}

TypeID można również w szablonach w celu określenia typu z parametrem szablonu:

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

Zobacz też

Informacje

Informacje o typie Run-Time

Słów kluczowych języka C++