使用typeid(变量或类型).name()来获取常量或变量的类型---gyy整理

2024-01-10 13:08

本文主要是介绍使用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整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590908

相关文章

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

springboot的controller中如何获取applicatim.yml的配置值

《springboot的controller中如何获取applicatim.yml的配置值》本文介绍了在SpringBoot的Controller中获取application.yml配置值的四种方式,... 目录1. 使用@Value注解(最常用)application.yml 配置Controller 中

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el