使用typeid(变量或类型).name()来获取常量或变量的类型---gyy整理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用typeid(变量或类型).name()来获取常量或变量的类型---gyy整理相关的知识,希望对你有一定的参考价值。
使用typeid(变量或类型).name()来获取常量或变量的类型
<typeinfo> 该头文件包含运行时类型识别(在执行时确定数据类型)的类
typeid的使用
typeid操作符 typeid表达式形如: typeid(expr);
这里expr是任意表达式或者类型名。如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。
typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义),因此使用typeid操作符时要包含头文件typeinfo的预处理命令“#include <typeinfo>”。标准并没有确切定义type_info,它的确切定义编译器相关的,但是标准却规定了其实现必需提供如下四种操作:
t1 == t2 | 如果两个对象t1和t2类型相同,则返回true;否则返回false |
t1 != t2 | 如果两个对象t1和t2类型不同,则返回true;否则返回false |
t.name() | 返回类型的C-style字符串,类型名字用系统相关的方法产生 |
t1.before(t2) | 返回指出t1是否出现在t2之前的bool值 |
type_info类提供了public虚析构函数,以使用户能够用其作为基类。它的默认构造函数和拷贝构造函数及赋值操作符都定义为private,所以不能定义或复制type_info类型的对象。程序中创建type_info对象的唯一方法是使用typeid操作符(由此可见,如果把typeid看作函数的话,其应该是type_info的友元)。type_info的name成员函数返回C-style的字符串,用来表示相应的类型名,但务必注意这个返回的类型名与程序中使用的相应类型名并不一定一致(往往如此,见后面的程序),这是由实现所决定的,标准只要求实现为每个类型返回唯一的字符串。
常用的形式:typeid(常量或变量或表达式).name()
//获取该常量或变量或表达式的数据类型名对应的字符串
例如
int a; float b;
cout<<typeid(a).name(); //输出结果为变量a的数据类型名: int
cout<<typeid(b).name(); //输出结果为变量b的数据类型名:float
cout<<typeid(‘$’).name(); //输出结果为常量‘$’的数据类型名: char
注意:在c++中,typeid用于获知一个常量或变量的具体类型。(注意:typeid本身是操作符,不是函数!)
使用实例
- //使用typeid(变量或类型).name()来获取常量或变量的类型
- #include <typeinfo> //使用类型获取函数必须包含此头文件
- #include <iostream>
- using namespace std;
- int main()
- {
- cout<< "常量1的数据类型:"<<typeid(1).name()<<endl;
- cout<< "常量1u的数据类型:"<<typeid(1u).name()<<endl;
- cout<< "常量1l的数据类型:"<<typeid(1l).name()<<endl;
- cout<< "常量3.14的数据类型:"<<typeid(3.14).name()<<endl;
- cout<< "常量3.14f的数据类型:"<<typeid(3.14f).name()<<endl;
- cout<< "常量\‘1\‘的数据类型:"<<typeid(‘1‘).name()<<endl;
- cout<< "常量\"1\"的数据类型:"<<typeid("1").name()<<endl;
- return 0;
- }
运行结果
以上是关于使用typeid(变量或类型).name()来获取常量或变量的类型---gyy整理的主要内容,如果未能解决你的问题,请参考以下文章