C++学习,标准库 <typeinfo>

     C++ 中,<typeinfo> 是标准库的一部分,它提供了运行时类型识别(RTTI,Run-Time Type Identification)功能。RTTI 允许程序在运行时确定对象的类型。这是通过使用 typeid 运算符和 type_info 类实现的。

     type_info 类是一个抽象基类,它提供了关于类型信息的接口。每个类型都有一个与之关联的 type_info 对象,可以通过 typeid 运算符访问。

语法
<typeinfo> 相关的主要语法:

typeid 运算符:用于获取对象的类型信息。
type_info 类:包含类型信息的类。

std::type_info 类
std::type_info 是一个抽象基类,用于表示类型的信息。它不能被直接实例化,只能通过 typeid 操作符获取其对象。

std::type_info 提供了以下几个成员函数:

name() const noexcept:返回一个指向以 null 结尾的字符数组的指针,该数组包含描述类型的字符串。这个字符串的格式是未指定的,依赖于实现。
operator== 和 operator!=:比较两个 std::type_info 对象是否表示相同的类型。
 

typeid 操作符
typeid 操作符用于获取一个对象的类型信息,其语法有两种形式:

typeid(T):其中 T 是一个类型(类或内置类型)。返回该类型的 std::type_info 对象的引用。
typeid(e):其中 e 是一个表达式。返回表达式 e 的静态类型的 std::type_info 对象的引用(如果 e 是多态类型,则返回其动态类型的 std::type_info 对象)。

示例代码

#include <iostream>  
#include <typeinfo>  
  
class Base {  
public:  
    virtual ~Base() = default; // 确保 Base 是一个多态类型  
};  
  
class Derived : public Base {};  
  
int main() {  
    Base* basePtr = new Derived();  
  
    // 使用 typeid 获取静态类型信息  
    std::cout << "Static type of basePtr: " << typeid(*basePtr).name() << std::endl;  
  
    // 使用 typeid 获取动态类型信息(需要多态类型)  
    std::cout << "Dynamic type of basePtr: " << typeid(basePtr).name() << std::endl;  
    std::cout << "Dynamic type of object pointed by basePtr: " << typeid(*basePtr).name() << std::endl;  
  
    // 比较类型信息  
    if (typeid(*basePtr) == typeid(Derived)) {  
        std::cout << "basePtr points to an object of type Derived" << std::endl;  
    } else {  
        std::cout << "basePtr does not point to an object of type Derived" << std::endl;  
    }  
  
    delete basePtr;  
    return 0;  
}

猜你喜欢

转载自blog.csdn.net/xuann/article/details/143134389