- Este utilizat acolo unde este nevoie de tipul dinamic sau tipul de rulare ale unui obiect.
#include<typeinfo>
- Mai multe detalii puteti gasi in documentatia oficiala
- Verifica tipurile (ex: x de tip int si y de tip int vor avea acelasi typeid)
- Returneaza un lvalue:
const type_info
typeid(type);
sau
typeid(expression);
Dacă expresia este o referință sau un pointer către o clasă polimorfă (are cel putin o metoda virtual),
typeid
va returna un obiect de tipul type_info
care reprezintă obiectul pe care referința sau pointerul îl capata la runtime.
Dacă NU este o clasă polimorfă, typeid
va returna un obiect de tipul type_info
care reprezintă tipul referinței sau al indicatorului
dereferențiat.
int x = 50;
string s = "string";
double *p = nullptr;
cout << "x has type: " << typeid(x).name() << endl;
cout << "s has type: " << typeid(s).name() << endl;
cout << "p has type: " << typeid(p).name() << endl;
Afiseaza:
x has type: i
s has type: NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
p has type: Pd
struct A { virtual ~A() { } };
struct B : A { };
int main() {
B ob;
A* p = &ob;
A& r = ob;
cout << "pointer: " << typeid(p).name() << endl;
cout << "deferntiere pointer: " << typeid(*p).name() << endl;
cout << "referinta: " << typeid(r).name() << endl;
}
Afiseaza - tipul la runtime:
pointer: P1A
pointer: 1B
referinta: 1B
struct A {};
struct B : A { };
int main() {
B ob;
A* p = &ob;
A& r = ob;
cout << "pointer: " << typeid(p).name() << endl;
cout << "deferntiere pointer: " << typeid(*p).name() << endl;
cout << "referinta: " << typeid(r).name() << endl;
}
Afiseaza - tipul declarat:
pointer: P1A
deferintiere pointer: 1A
referinta: 1A