在 C++ 中,typeid()
是一个运算符,用于获取表达式的类型信息。typeid()
运算符在 C++ 中是一个强大的工具,可以用于获取对象的类型信息、类型比较、多态类型判断、异常处理以及类型转换安全检查等场景中。
1. 类型比较:
可以使用 typeid()
来比较两个类型是否相同。
if (typeid(obj1) == typeid(obj2)) {// 对象 obj1 和 obj2 的类型相同
}
2. 多态类型判断:
可以使用 typeid()
来判断对象是否属于某个特定的派生类类型。
Base* base_ptr = new Derived();
if (typeid(*base_ptr) == typeid(Derived)) {// base_ptr 所指对象的类型是 Derived 类型
}
3. 异常处理:
在某些情况下,typeid()
可以用于异常处理,例如在捕获异常时根据类型做出不同的处理。
try {// 可能抛出不同类型的异常
} catch (const std::exception& e) {if (typeid(e) == typeid(std::runtime_error)) {// 处理 runtime_error 类型的异常} else if (typeid(e) == typeid(std::logic_error)) {// 处理 logic_error 类型的异常} else {// 其他类型的异常处理}
}
4. 类型转换安全检查:
在某些需要类型转换的场景下,可以使用 typeid()
进行安全检查,确保类型转换的合法性。
Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr);
if (derived_ptr && typeid(*base_ptr) == typeid(Derived)) {// base_ptr 指向 Derived 类型的对象// 并且类型转换成功
}