21xrx.com
2024-05-09 14:16:21 Thursday
登录
文章检索 我的文章 写文章
C++中的typeid用法解析
2023-11-22 10:02:47 深夜i     --     --
C++ typeid 用法 解析

在C++编程语言中,`typeid`是一种用于获取类型信息的运算符。它可以帮助程序员在运行时确定一个对象的类型。`typeid`被定义在` `头文件中,并且返回一个`type_info`类型的对象。

`typeid`的基本用法是将一个表达式作为参数传递给它,然后它会返回该表达式的类型信息。这个表达式可以是一个对象、引用或指针,甚至是一个类或结构体。

让我们以一个简单的例子来解析`typeid`的用法。假设我们有一个基类`Shape`,以及两个派生类`Circle`和`Rectangle`。我们可以使用`typeid`来判断一个指向基类对象的指针所指向的具体派生类类型。下面是一个示例代码:


#include <iostream>

#include <typeinfo>

class Shape

 // 省略类的实现细节

;

class Circle : public Shape

 // 省略类的实现细节

;

class Rectangle : public Shape

 // 省略类的实现细节

;

int main() {

 Shape* shapePtr;

 Circle circle;

 shapePtr = &circle;

 std::cout << "shapePtr指向的派生类类型是:" << typeid(*shapePtr).name() << std::endl;

 Rectangle rectangle;

 shapePtr = &rectangle;

 std::cout << "shapePtr指向的派生类类型是:" << typeid(*shapePtr).name() << std::endl;

 return 0;

}

上面的代码中,我们创建了一个指向基类`Shape`的指针`shapePtr`,然后分别将它指向`Circle`对象和`Rectangle`对象。使用`typeid(*shapePtr).name()`,我们可以获取指针所指向对象的类型信息,并通过`.name()`成员函数打印出类型的名称。

运行上面的代码,我们会得到以下输出:


shapePtr指向的派生类类型是:6Circle

shapePtr指向的派生类类型是:8Rectangle

可以看到,`typeid`返回的类型信息是一个以数字开头的字符串。对于自定义的类,这个字符串的具体格式可能会有所不同。

除了用于获取对象的类型信息之外,`typeid`还可以用于比较两个类型是否相等。我们可以使用`==`运算符将两个`type_info`类型的对象进行比较。如果相等,说明两个类型是相同的;如果不相等,则表示两个类型不同。例如:


#include <iostream>

#include <typeinfo>

int main() {

 std::cout << (typeid(int) == typeid(float)) << std::endl; // 输出0,表示int和float类型不相等

 std::cout << (typeid(int) == typeid(int)) << std::endl; // 输出1,表示int和int类型相等

 return 0;

}

上述代码中,我们比较了`int`和`float`的类型信息,以及两个`int`类型的类型信息。运行结果会分别输出0和1,这说明`int`和`float`类型不相等,而两个`int`类型是相等的。

总结起来,`typeid`是C++中用于获取类型信息的运算符。我们可以使用它来获取对象的类型信息,并可以通过`==`运算符比较两个类型是否相等。这在某些情况下对于程序的流程控制和多态性编程非常有用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复