TypeId işleci
typeid( type-id )
typeid( expression )
Notlar
typeid Operator zamanında belirlenmesi için bir nesne türünü verir.
Sonucu typeid olan bir consttype_info &. Başvuru değeri olan bir type_info ya da temsil eden nesne Tür Kimliği ya da ifadehangi biçiminin bağlı typeid kullanılır. Bkz: type_info sınıfı daha fazla bilgi için.
typeid İşleci (soyut declarators veya örnekleri) yönetilen türleriyle çalışmaz, bkz: TypeId alma hakkında bilgi için Type belirli bir türde.
typeid Operator burada sağlanan statik bilgilere göre doğru nesne türü belirlenemez bir l-değeri için uymanız sınıfı türünden uygulandığında bir çalışma zamanı denetimi yapar. Bu gibi durumlarda şunlardır:
Bir sınıf için bir başvuru
Bir işaretçi ile başvuru yapıldı, *
Simgeli bir işaretçi (yani [ ]). (Bu genellikle uymanız türünü gösteren bir işaretçi içeren bir alt simge kullanmak güvenli olmadığını unutmayın.)
İfade işaret eden bir temel sınıf türü için nesne gerçekten Temel sınıftan türetilmiş bir tür olduğundan henüz bir type_info sonucu türetilmiş bir sınıf için başvuru. İfade polimorfik türü (sanal işlevlere sahip bir sınıf) göstermelidir. Aksi halde, sonuç ise type_info olarak anılacaktır statik sınıf için ifade. Başvuru için gösterdiği nesne kullanılmasını sağlamak amacıyla, işaretçiyi yapıldı gerekir. İşaretçi başvurusunun kaldırılması olmadan sonucu olacaktır type_info işaretçisi, hangi BT gösteriyor. Örne?in:
// 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;
}
İfade bir işaretçi başvurusunun kaldırılması ve işaretçinin değeri sıfır olan TypeID atar bir bad_typeid özel durum. İşaretçi geçerli bir nesneye işaret etmiyorsa bir __non_rtti_object exception Is Thrown'un, tetiklenen bir hataya RTTI çözümleme denemesi gösteren (erişim ihlali ister) nesnesi şekilde geçersiz olduğundan (hatalı işaretçi veya kod değildi ile derlenmiş /gr).
İfade ne bir işaretçi, ne de bir temel sınıf nesnesi başvurusu sonucu olan bir type_info statik türünü temsil eden başvuru ifade. Statik türde derleme zamanında bilindiği gibi bir ifade bir ifadenin tipine işaret eder. Yürütme semantiği statik türde bir ifadenin değerlendirirken göz ardı edilir. Üstelik başvuruları mümkün olduğunda statik türde bir ifadenin belirlerken dikkate alınmaz:
// expre_typeid_Operator_2.cpp
#include <typeinfo>
int main()
{
typeid(int) == typeid(int&); // evaluates to true
}
TypeId şablonlar şablon parametrenin türünü belirlemek için de kullanılabilir:
// 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 );
}