21xrx.com
2024-09-20 05:48:47 Friday
登录
文章检索 我的文章 写文章
C++ 中的 typeid(类型标识符)
2023-07-09 17:22:01 深夜i     --     --
C++ typeid 类型标识符 运算符 动态类型检查

在C++中,typeid是一种类型标识符,它用于获取某个对象的类型信息。我们可以使用typeid操作符来获取一个对象的类型,或者使用typeid关键字来获取一个类型的信息,这些信息包括类型的名称、具体类型、类型大小等。

使用typeid操作符获取对象的类型信息时,需要将一个对象作为参数传递给typeid操作符,然后它将返回一个std::type_info类型的对象,这个对象包含了该对象的具体类型信息。例如,下面的示例代码演示了如何使用typeid操作符来获取对象的类型信息:


#include <iostream>

#include <typeinfo>

int main() {

 int number = 10;

 std::cout << typeid(number).name() << std::endl; // 输出 "i"

 return 0;

}

在上面的示例代码中,我们定义了一个int类型的变量number,并使用typeid操作符来获取该变量的类型信息。最后,我们输出了该对象的类型名称,它输出了一个字符 "i",表示该对象的类型是int。

另一种使用typeid的方式是使用typeid关键字来获取指定类型的信息。例如,我们可以使用typeid关键字来获取一个类的类型信息,如下所示:


#include <iostream>

#include <typeinfo>

class Person {

public:

 virtual void sayHi() I am a Person." << std::endl;

 

};

class Student : public Person {

public:

 void sayHi()

  std::cout << "Hi

};

int main() {

 Person p;

 Student s;

 std::cout << typeid(p).name() << std::endl; // 输出 "6Person"

 std::cout << typeid(s).name() << std::endl; // 输出 "7Student"

 Person* ptr = &s;

 std::cout << typeid(*ptr).name() << std::endl; // 输出 "7Student"

 return 0;

}

在上述示例代码中,我们定义了两个类,Person和Student,分别继承自Person类。我们创建了一个Person类型的对象p和一个Student类型的对象s,并使用typeid关键字来获取它们的类型信息。我们还定义了一个Person类型的指针ptr,并将其指向Student对象s,然后同样使用typeid关键字来获取指针所指向对象的类型信息。

在上述代码中,我们可以看到,typeid关键字返回的不是类型的名称,而是一个字符串表示的类型信息。其中,数字部分表示类型的长度,后面的字符表示类型的名称。这些字符可以是任何可打印的ASCII字符。

总之,typeid是一种有用的类型标识符,它允许我们在运行时获取对象的类型信息。使用typeid,我们可以轻松地检测对象的类型,然后根据不同的类型执行不同的操作。

  
  

评论区

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