typeid是C++的關(guān)鍵字之一,等同于sizeof這類的操作符。typeid操作符的返回結(jié)果是名為type_info的標(biāo)準(zhǔn)庫(kù)類型的對(duì)象的引用。
如果表達(dá)式的類型是類類型且至少包含有一個(gè)虛函數(shù),則typeid操作符返回表達(dá)式的動(dòng)態(tài)類型,需要在運(yùn)行時(shí)計(jì)算;否則,typeid操作符返回表達(dá)式的靜態(tài)類型,在編譯時(shí)就可以計(jì)算。
#define OUTPUT(f) cout << #f << "\t: " << 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 << "-------直接處理類名-------" <<endl;
OUTPUT(BaseA);
OUTPUT(DeriveA);
OUTPUT(BaseB);
OUTPUT(DeriveB);
cout << endl << "-------基類不含虛函數(shù)-------" <<endl;
BaseA baseA;
DeriveA deriveA;
OUTPUT(baseA);
OUTPUT(deriveA);
BaseA* pa;
pa = &baseA;
OUTPUT(*pa);
OUTPUT(pa);
pa = &deriveA;
OUTPUT(*pa);
OUTPUT(pa);
cout << endl << "-------基類含有虛函數(shù)-------" <<endl;
BaseB baseB;
DeriveB deriveB;
OUTPUT(baseB);
OUTPUT(deriveB);
BaseB* pb;
pb = &baseB;
OUTPUT(*pb);
OUTPUT(pb);
pb = &deriveB;
OUTPUT(*pb);
OUTPUT(pb);
}
1.當(dāng)typeid操作符的操作數(shù)是不帶有虛函數(shù)的類類型時(shí),typeid操作符會(huì)指出操作數(shù)的類型,而不是底層對(duì)象的類型。
2.如果typeid操作符的操作數(shù)是至少包含一個(gè)虛擬函數(shù)的類類型時(shí),并且該表達(dá)式是一個(gè)基類的引用,則typeid操作符指出底層對(duì)象的派生類類型。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。