Класс type_info
Класс type_info содержит информацию о типе данных,
полученную с помощью оператора typeid. Объекты
этого класса нельзя создать напрямую - они возвращаются
оператором typeid. С помощью type_info можно
сравнивать типы операторами == и !=, а
также получать имя типа методом name. Класс
объявлен в заголовочном файле <typeinfo>.
Синтаксис
#include <typeinfo>
const type_info& ti = typeid(expression);
Пример
Давайте получим информацию о типе переменной int
и сравним её с типом double:
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
int a = 5;
double b = 3.14;
if (typeid(a) == typeid(int)) {
cout << "a is int" << endl;
}
if (typeid(a) != typeid(b)) {
cout << "a and b have different types" << endl;
}
return 0;
}
Результат выполнения кода:
"a is int"
"a and b have different types"
Пример
Давайте получим имя типа с помощью метода name:
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
int a = 5;
double b = 3.14;
string s = "abcde";
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(s).name() << endl;
return 0;
}
Результат выполнения кода:
"i"
"d"
"NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE"
Пример
Давайте сравним типы двух указателей и проверим, являются ли они одинаковыми:
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
int* p1 = nullptr;
int* p2 = nullptr;
double* p3 = nullptr;
if (typeid(p1) == typeid(p2)) {
cout << "p1 and p2 have the same type" << endl;
}
if (typeid(p1) != typeid(p3)) {
cout << "p1 and p3 have different types" << endl;
}
return 0;
}
Результат выполнения кода:
"p1 and p2 have the same type"
"p1 and p3 have different types"