21xrx.com
2024-09-19 23:55:23 Thursday
登录
文章检索 我的文章 写文章
C++中typeid函数的返回类型
2023-07-05 02:40:08 深夜i     --     --
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函数。

  
  

评论区

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