📅  最后修改于: 2023-12-03 15:05:39.075000             🧑  作者: Mango
在 C++ 中,typeid
是一种用于获取表达式的运行时类型信息的运算符。它可以用来获取一个对象、指针、引用等的类型信息,并返回一个 type_info
类型的对象,该对象包含有关该类型的信息。
使用typeid
时,需要将表达式作为操作数,语法如下:
typeid(expression);
该操作符返回一个std::type_info
类型的对象,其用法可以包括下列操作:
// 获取对象/类型/变量的名称
const char* name = typeid(expression).name();
// 比较类型是否相等
bool isEqual = typeid(expression1) == typeid(expression2);
// 判断对象是否是某种类型之一
bool isDerived = dynamic_cast<DerivedClass*>(obj) != nullptr;
下面是一些关于 typeid
的示例:
#include <iostream>
#include <typeinfo>
int main() {
int i = 5;
std::cout << "Type of i is " << typeid(i).name() << std::endl;
const char* str = "Hello, World!";
std::cout << "Type of str is " << typeid(str).name() << std::endl;
if (typeid(i) == typeid(int)) {
std::cout << "i is an integer" << std::endl;
}
class Base {
public:
virtual void print() {}
};
class Derived : public Base {};
Base* baseObj = new Derived();
if (typeid(*baseObj) == typeid(Derived)) {
std::cout << "baseObj is a Derived object" << std::endl;
}
return 0;
}
上面的代码输出如下:
Type of i is int
Type of str is char const *
i is an integer
baseObj is a Derived object
typeid
返回的类型和实际类型名字之间可能没有直接的联系。(编译器可能会进行优化来简化类型信息,以减小可执行文件的大小)typeid
。typeid
返回的不是指针或引用类型的信息本身,而是指向基本类型的指针类型的信息。typeid
返回的类型信息会在运行时动态生成,因此通常会比使用其他方式获取类型信息要慢一些。typeid
运算符是 C++ 中一种能够提供关于运行时类型信息的很有用的技巧。通过 typeid
,我们可以获取一个对象、指针或引用等的类型信息,并动态地根据这些信息来执行相应的操作。虽然 typeid
能够提供有关类型的有效信息,但仍然需要谨慎使用,因为它可能并不总是返回所期望的结果。