21xrx.com
2025-06-17 05:44:57 Tuesday
登录
文章检索 我的文章 写文章
C++中typeid函数的返回类型
2023-07-05 02:40:08 深夜i     23     0
C++ typeid函数 返回类型

在C++中,typeid函数可以用于获取一个对象或类型的运行时类型信息。其语法为:

typeid(expression)

其中,expression可以是任意的表达式、变量或类型名。该函数返回一个type_info对象,包含了expression的类型信息。

type_info是一个类,定义在typeinfo头文件中。它拥有以下成员函数:

- name():返回一个指向表示类型名的字符串的指针

- operator==()、operator!=():用于判断两个type_info对象是否相等

- before():用于比较两个type_info对象的顺序关系

使用typeid函数时,需要注意以下几点:

1. 只有在运行时才能确定一个对象或类型的实际类型,因此typeid函数的返回值也是在运行时确定的。

2. 对于基本类型和void类型,typeid函数的返回值是编译时确定的,因此它们的type_info对象是唯一的。

3. 对于类类型,typeid函数的返回值是该类的实际类型,而不是基类类型或指针类型。

下面是一个示例程序,演示了如何使用typeid函数:

#include <iostream>
#include <typeinfo>
using namespace std;
class A {};
class B : public A {};
class C {};
int main() {
  int a = 1;
  double b = 2.0;
  A* c = new B();
  A* d = new A();
  C e;
  cout << "a的类型为:" << typeid(a).name() << endl; // 输出i(int的缩写)
  cout << "b的类型为:" << typeid(b).name() << endl; // 输出d(double的缩写)
  cout << "c的类型为:" << typeid(*c).name() << endl; // 输出1B(B的类型,符号“1”表示是类类型)
  cout << "d的类型为:" << typeid(*d).name() << endl; // 输出1A(A的类型)
  cout << "e的类型为:" << typeid(e).name() << endl; // 输出1C(C的类型)
  // 比较c和d的类型
  if (typeid(*c) == typeid(*d))
    cout << "c和d的类型相同" << endl;
   else
    cout << "c和d的类型不同" << endl;
  
  delete c;
  delete d;
  return 0;
}

上述程序输出的结果为:

a的类型为:i
b的类型为:d
c的类型为:1B
d的类型为:1A
e的类型为:1C
c和d的类型不同

可以看出,使用typeid函数可以方便地获取一个对象或类型的运行时类型信息,并进行类型比较等操作。需要注意的是,由于typeid函数是在运行时确定结果的,因此它会带来一定的性能上的损失。因此,在实际的程序开发中,应该根据实际情况来选择使用或不使用typeid函数。

  
  

评论区

    相似文章