c++中typeid的用法详解
时间: 2023-12-01 09:03:08 浏览: 166
typeinfo是C++内置类型信息库,在程序运行时动态获取对象或类型的信息。typeinfo 主要包含 type_info 类型以及 3 个运算符:typeid、dynamic_cast 与 typeid。typeid 运算符用于获取一个类型或一个表达式的类型信息,返回值是一个 const std::type_info & 类型的引用。具体用法可以参考C++标准库相关文档。
相关问题
typeid类详解并举例
`typeid` 是 C++ 标准库中的一个类型信息运算符,用于获取编译器内部对类型的信息描述。这个运算符返回一个 `std::type_info` 对象,该对象包含关于特定类型的名称、大小、成员等信息,但主要用于运行时类型识别(RTTI)而不是直接操作。
`typeid` 的用法通常如下:
```cpp
std::type_info ti = typeid(object);
```
这里 `object` 可以是任何类型的实例,`ti` 将存储关于 `object` 类型的信息。例如,你可以使用 `==` 操作符比较两个 `type_info` 是否代表相同的类型:
```cpp
if (typeid(myObject).name() == typeid(yourObject).name()) {
// myObject 和 yourObject 实际上是同一个类型
}
```
值得注意的是,`typeid` 主要应用于动态类型检查(dynamic typing),比如单元测试或调试工具,因为 C++ 编译期没有类型信息可用。另外,`typeid` 不适用于模板和继承链复杂的情况,因为它不能处理模板特化后的类型。
举个例子:
```cpp
class MyClass {};
class MyDerivedClass : public MyClass {};
int main() {
std::type_info tiMyClass = typeid(MyClass);
std::type_info tiMyDerivedClass = typeid(MyDerivedClass);
if (tiMyClass != tiMyDerivedClass) {
std::cout << "MyClass and MyDerivedClass are different types.\n";
} else {
std::cout << "MyClass and MyDerivedClass are the same type.\n";
}
return 0;
}
```
在这个例子中,如果 `MyClass` 和 `MyDerivedClass` 是不同的类型,那么输出将是 "MyClass and MyDerivedClass are different types."。
阅读全文