C++中typeid的用法
typeid是C++的关键字之一,等同于sizeof这类的操作符。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用。
如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。
#define OUTPUT(f) cout << #f << \"\: \" << typeid(f).name() << endl;
class BaseA {};
class DeriveA: public BaseA {};
class BaseB
{
virtual void f(){}
};
class DeriveB: public BaseB {};
int _tmain(int argc, _TCHAR* argv[])
{
cout << \"-------直接处理类名-------\" < OUTPUT(DeriveA); OUTPUT(BaseB); OUTPUT(DeriveB); cout << endl << \"-------基类不含虚函数-------\" < DeriveA deriveA; OUTPUT(baseA); OUTPUT(deriveA); BaseA* pa; pa = &baseA; OUTPUT(*pa); OUTPUT(pa); pa = &deriveA; OUTPUT(*pa); OUTPUT(pa); cout << endl << \"-------基类含有虚函数-------\" < DeriveB deriveB; OUTPUT(baseB); OUTPUT(deriveB); BaseB* pb; pb = &baseB; OUTPUT(*pb); OUTPUT(pb); pb = &deriveB; OUTPUT(*pb); OUTPUT(pb); } 1.当typeid操作符的操作数是不带有虚函数的类类型时,typeid操作符会指出操作数的类型,而不是底层对象的类型。 2.如果typeid操作符的操作数是至少包含一个虚拟函数的类类型时,并且该表达式是一个基类的引用,则typeid操作符指出底层对象的派生类类型。 因篇幅问题不能全部显示,请点此查看更多更全内容