Сущность typeid в C++
Тип информации, возвращаемой функцией `typeid`, зависит от типа данных, переданных в качестве аргумента. Функция `typeid` предназначена для определения типа объекта во время выполнения программы.
Вот несколько примеров кода:
c++
#include
#include
int main() {
int num = 10;
std::cout << typeid(num).name() << std::endl;
std::string str = "Hello World";
std::cout << typeid(str).name() << std::endl;
float arr[] = {1.0, 2.0, 3.0, 4.0, 5.0};
std::cout << typeid(arr).name() << std::endl;
return 0;
}
В этом примере выводится имя типа переменной `num`, которая является объектом типа `int`. Вывод будет зависеть от компилятора, и в некоторых случаях может быть достаточно запутанным, например, `i`, но обычно он будет что-то проще для понимания, например, `int`.
Однако, если нам понадобится имя типа для работы с наследованием, лучше использовать полностью квалифицированные имена типов. Например:
c++
#include
#include
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {};
int main() {
Base* basePtr = new Derived();
std::cout << typeid(*basePtr).name() << std::endl;
return 0;
}
В этом примере выводится имя типа, хранящегося в указателе `basePtr`. Указатель указывает на объект, производный от `Base`, но используя `typeid(*basePtr).name()` мы получаем имя типа `Derived`, потому что мы используем динамическую типизацию, и `typeid` получает информацию о типе объекта, на который указывает указатель `basePtr`.
В целом, функция `typeid` полезна при работы с наследованием и динамической типизацией, так как она позволяет узнать реальный тип объекта во время выполнения программы.