C++ typeinfo用法总结

C++中的typeInfo用法总结 typeid是C++的关键字之一,结合typeinfo可以很好的帮助我们查看数据类型,尤其在继承和模板盛行的C++中。 阅读详情

目录

一.name操作

二.!=和==操作

三.总结说明


一.name操作

1.语法:

typeid(data).name();

填入参数,参数可以是数据类型也可以是数据,该函数以C风格的字符串指针形式返回该数据的类型名。

2.示例:

C++代码:

#include<iostream>
#include<vector>
#include<list>
#include<string>
#include<map>
#include<typeinfo>
using namespace std;

class example
{
private:
	string name;
};

int main()
{
	int a;
	int* ptr;
	vector<string> vec;
	list<int> lis;
	string str;
	map<string, int> m1;
	example e1;

	//typeid(data).name();

	cout << "int is:" << typeid(int).name() << endl;
	cout << "-------------------" << endl;
	cout << "a is:" << typeid(a).name() << endl;
	cout << "-------------------" << endl;
	cout << "ptr is:" << typeid(ptr).name() << endl;
	cout << "-------------------" << endl;
	cout << "vec is:" << typeid(vec).name() << endl;
	cout << "-------------------" << endl;
	cout << "lis is:" << typeid(lis).name() << endl;
	cout << "-------------------" << endl;
	cout << "str is:" << typeid(str).name() << endl;
	cout << "-------------------" << endl;
	cout << "m1 is:" << typeid(m1).name() << endl;
	cout << "-------------------" << endl;
	cout << "e1 is:" << typeid(e1).name() << endl;
	cout << "-------------------" << endl;

	system("pause");
	return 0;
}

程序运行结果:

二.!=和==操作

1.语法:

typeid(data1) == typeid(data2);
typeid(data3) != typeid(data4);

判断两个数据是否相同,参数可以是数据类型也可以是数据

2.示例:

C++代码:

#include<iostream>
#include<typeinfo>
#include<string>
using namespace std;

class base
{
};

class derive :public base
{
};

int main()
{
	base b1;
	derive d1;
	if (typeid(b1) == typeid(base))
	{
		cout << "b1 is a base" << endl;
	}
	
	if (typeid(d1) != typeid(base))
	{
		cout << "d1 is not a base" << endl;
	}

	if (typeid(d1) == typeid(derive))
	{
		cout << "d1 is a derive" << endl;
	}

	string name;
	if (typeid(name) == typeid(string))
	{
		cout << "name is a string" << endl;
	}


	system("pause");
	return 0;
}

程序运行结果:

三.总结说明

1.和sizeof这类的操作符一样,typeid是C++的关键字之一。
2.typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义)

3.typeid(*this) -- 返回一个type_info对象,关联至this指针所指对象
4.C++并没有规定typeid实现标准,各个编译器可能会不一样。
5.编译器会为每一种typeid操作的类型生成一份保存在数据段的type_info数据。
6.每种类型的type_info数据长度依赖于类型名称,至少9个字节。

7.typeid运算符会返回一个type_info对象,其中储存着与类型相关的种种信息。

 参考文章:(56条消息) C++中的typeInfo用法总结_非晚非晚的博客-优快云博客_typeinfo
 

【深度C++】之“typeid与type_info” typeid与type_info。 阅读详情

相关推荐

C++ RTTI 机制下判断类型的 typeid 和记录类型信息的 type_info

RTTI RTTI(RunTime Type Identification),运行时类型识别。C++ 是允许在程序运行过程中,根据指针和引用的实际类型来决定执行方法的(动态多态)。因为运行时变量声明的类型和实际的类型可能不一样,所以就有了RTTI。RTTI包含两个内容:typeid 和 dynamic_cast。typeid 用来确定目标的实际类型是什么。dynamic_cast 用于基类向派生类的向下转型。 typeid 用于判断目标类型。typeid(n),参数n可以是类型、变量、字面量等,typeid

竹剑单 1599

c++之巧用type_info

注册博客有一段时间,一直很忙没有写技术文章,今天把近期心得写出来一起分享。 c++没有反射机制,我们可以通过c++的语言特性去实现同样的功能。本文介绍使用type_info实现的一些发射特性。 1 type_info简介: class type_info {public: _CRTIMP virtual ~type_info(); _CRTIMP int operator==...

weixin_30628801的博客 629

用boost::detail::sp_typeinfo实现类型信息的获取

boost::detail::sp_typeinfo是一个用于获取类型信息的工具类,在智能指针库boost::shared_ptr中被广泛使用。可以将该值用于类型比较、类型转换等操作。需要注意的是,boost::detail::sp_typeinfo虽然可以获得类型信息,但它并不是标准C++的一部分,而是boost库的一部分。总之,boost::detail::sp_typeinfo是一个非常有用的工具类,它可以方便地获取用户自定义类型的信息,为我们开发高质量的C++程序提供了很大的帮助。

DevCharm的博客 188

typeinfo、typeid、 typeof 介绍

一、type_info类 该类type_info保存有关类型的特定于实现的信息,包括类型的名称以及比较两种类型是否相等或排序顺序的方式。这是typeid运算符返回的类。 #ifndef _TYPEINFO #define _TYPEINFO #include <exception> namespace std { class type_info { publ...

Jeff_的博客 5726

boost::core::typeinfo的用法实例

boost::core模块boost::core::typeinfo的用法实例实现功能C++实现代码 实现功能 boost::core模块boost::core::typeinfo的用法实例 C++实现代码 #include <boost/core/typeinfo.hpp> #include <boost/core/lightweight_test.hpp> boost::core::typeinfo const & get_typeid_int(); int main()

希望我的博客,能帮上你解决学习中工作中所遇到的问题 505

boost::detail::sp_typeinfo用法实例

boost::core模块boost::detail::sp_typeinfo用法实例实现功能C++实现代码 实现功能 boost::core模块boost::detail::sp_typeinfo用法实例 C++实现代码 #define BOOST_ALLOW_DEPRECATED_HEADERS #include <boost/detail/sp_typeinfo.hpp> #include <boost/core/lightweight_test.hpp> #include &

希望我的博客,能帮上你解决学习中工作中所遇到的问题 601

C/C++中decltype关键字用法总结以及与typeinfo区别

decltype可以作用于变量、表达式及函数名。①作用于变量直接得到变量的类型;②作用于表达式,结果是左值的表达式得到类型的引用,结果是右值的表达式得到类型;③作用于函数名会得到函数类型,不会自动转换成指针。 总的来说,decltype在C++中是一个非常强大的工具,它允许开发者以更简洁和灵活的方式处理复杂的类型问题。

红军不怕远征难,万水千山只等闲 5355

STM32 Nucleo-144开发板开箱bring-up

最近做项目,用到STM32F446ZET6这款MCU,为了赶进度,前期软件需要提前开发,于是在某宝买了对应主控的官方开发板,为了避免遗忘,后面能翻出来回忆一些细节,就形成了本篇的主要内容,同时也希望能够帮助刚上手的小伙伴少走弯路,如果对你有帮助请点赞、收藏、转发,谢谢!

汽车电子软件领域知识分享 2678

C++ 标准库 <typeinfo>

typeinfo>依赖于编译器的运行时类型识别(RTTI)机制,允许在程序运行期间查询对象或表达式的类型信息。typeid操作符类注意:在多数编译器中,RTTI 默认开启;可通过编译选项(如 GCC 的-fno-rtti)关闭,关闭后<typeinfo>功能受限。

m0_57545130的博客 1175

如何用Timer模型处理多变量时间序列?附完整代码示例

本文深入解析了如何运用清华大学的Timer模型处理多变量时间序列预测任务。通过一个完整的智能工厂设备监控实战案例,详细介绍了从数据预处理、模型构建、训练调优到预测可视化的全流程,并提供了可运行的完整代码示例,帮助开发者掌握这一强大的时序分析工具。

weixin_29243063的博客 250

BALM2深度解析 | 港大MARS实验室如何用点簇革新激光BA?

本文深度解析了港大MARS实验室提出的BALM2方案如何通过点簇技术革新激光BA(Bundle Adjustment)处理。BALM2将点云数据聚合为点簇,显著提升计算效率,实测显示其计算耗时仅为传统方法的1/20。文章详细介绍了点簇的核心原理、二阶优化方法及与传统方法的性能对比,展示了其在激光SLAM领域的突破性应用。

weixin_29212867的博客 153

十大主流交换机品牌选型指南:需求分析、配置实操与避坑

在企业组网与弱电工程中,交换机是连接终端、划分广播域和承载业务流量的核心设备。理解端口速率、背板带宽、包转发率、VLAN 与三层路由等基础原理,才能判断一台设备是否满足线速转发与跨网段通信需求。管理型交换机通过 VLAN 隔离、链路聚合、STP 防环和 PoE 供电,为办公、园区、监控、无线 AP 等场景提供稳定接入;非管理型设备则适合简单扩口。选型时需先明确端口数量、上联带宽、二层或三层、PoE 预算,再结合华为、H3C、锐捷、思科、TP-Link 等品牌的定位与运维习惯。不同品牌在命令体系、功能授权和维

weixin_33766805的博客 370

Win10和Ubantu16.04双系统下,卸载Ubantu

Win10和Ubantu16.04双系统下,卸载Ubantu 机器配置 华硕主板,英伟达显卡(这不是重点) Win10与Ubantu16.04均为UFFI分区(如果不知道这个也不需要在意,一般默认的都是这样,鸵鸟原则) 清除Ubantu系统 一般按照常规的方法来删除Ubantu,都是直接将磁盘管理器里面的关于Ubantu的磁盘清空,但是还会留下一个UFFI分区,如果不进行删除的话,开机时候还是会有...

qq_33289694的博客 391

c++ typeinfo

typeinfo>头文件中的type_info类及相关机制为 C++ 提供了强大的运行时类型识别(RTTI)功能,其在多种场景下发挥着重要作用,但也存在一定的局限性。

qq_62784677的博客 1238

车底盘:阿克曼转向和四轮差速

特性四轮差速四轮转向阿克曼转向转向方式控制左右轮组速度差控制四个轮子的角度控制前轮角度(后轮固定)运动原理滑移摩擦(搓着走)纯滚动(滚着走)近乎纯滚动(低速时)能耗高低(实现纯滚动时)中轮胎磨损非常严重小中灵活性高(可原地旋转)极高(可全向移动)低(转弯半径大)控制精度较低(受地面摩擦影响大)极高高机械复杂度低(通常只需2个驱动电机)极高(需4个转向+4个驱动执行器)中(需1个转向+2个驱动执行器)典型应用坦克、履带车辆、简单AGV、扫地机器人豪华轿车、高性能全向AGV。

bing_feilong的博客 1926

[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe案例分析。这篇文章将继续详细讲解WannaCry蠕虫的传播机制,带领大家详细阅读源代码,分享WannaCry勒索病毒是如何传播感染的。作者分析该病毒一个月,一方面觉得自己技术菜,另一方面深知系统安全需要坚持,继续加油。希望文章对您有所帮助~

杨秀璋的专栏 1万+

C++ 用于运行时类型识别的typeinfo库使用指南

C++中的typeinfo库支持运行时类型识别(RTTI),包含type_info类和typeid操作符。type_info提供类型名称获取(name())和比较功能,typeid可获取表达式或类型的type_info对象。该功能在多态编程中尤为重要,能动态识别派生类类型,但会带来一定性能开销。示例展示了如何通过typeid获取基类和派生类类型信息并进行比较。使用时需注意多态性影响和编译器差异。typeinfo为调试、日志和多态实现提供了有效工具。

Tipriest的博客 523

如何实现一个用STM32F103C8T6作为主控芯片,加上AD8232、MAX30102 、MPU6050模块的用于运动中监测心率变异性??

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1213

typeinfo.h 头文件的用法

/*C++获取对象类型 * 可用typeid(object_name).name()函数,该函数在头文件 <typeinfo> 中 */ #include <iostream> #include <typeinfo> using namespace std; struct Student { }; int main() { int a1 = 0; int a2[5] = {0,1,2,3,4}; char b[3] = {'0' }; .

芯片驱动开发实践 1932

大模型的应用与微调:如何调用 LLM?从 OpenAI API 到本地部署

本篇文章介绍了如何调用 OpenAI、DeepSeek、Manus、通义千问等大模型 API,并探讨了 LLM 本地部署的方法。在实际应用中,可以根据需求选择云端 API 或本地化部署方案,以满足不同的计算需求和隐私要求。下一篇:大模型微调与 RAG 技术(LoRA、QLoRA、向量数据库)

晴天彩虹雨的博客 1157

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Boost中Core模块的typeinfo用法

头文件 boost/core/typeinfo.hpp 作用 与std::typeinfo 功能一致 举例 #include &lt;boost/core/typeinfo.hpp&gt; #include &lt;boost/core/lightweight_test.hpp&gt; #include &lt;iostream&gt; int main() { BOOST...

jianxiong1985的博客 398

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++学习,标准库 <typeinfo>

返回表达式 e 的静态类型的 std::type_info 对象的引用(如果 e 是多态类型,则返回其动态类型的 std::type_info 对象)。name() const noexcept:返回一个指向以 null 结尾的字符数组的指针,该数组包含描述类型的字符串。std::type_info 是一个抽象基类,用于表示类型的信息。返回该类型的 std::type_info 对象的引用。=:比较两个 std::type_info 对象是否表示相同的类型。type_info 类:包含类型信息的类。

五味香的专栏 664

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++ 内存布局 - Part1: typeid, typeinfo及单继承

typeinfo中存储的是关于类型的信息,可以通过以下代码都是在X86_64 Linux中完成,g++编译。可见,在没有虚函数的情况下,即使指针 ptr实际指向的是派生类对象,但是没有虚表的帮助,只能返回编译器静态类型,也就是基类类型。[有虚函数的类继承]

fish的专栏 854

C++通过typeinfo获取对象类型.cpp

/*C++获取对象类型 * 可用typeid(object_name).name()函数,该函数在头文件 中 */#include #include using namespace std;struct Student {};int main(){    int a1 = 0;    int a2[5] = {0,1,2,3,4};    char b[3] = {'0' };    Stude

东哥的博客 4648

C++反射高级技巧:使用CPP-Reflection实现动态函数调用与类型信息获取

在C++开发中,反射机制一直是实现动态功能的关键技术。CPP-Reflection作为一款强大的C++反射解析器与运行时框架,为开发者提供了便捷的动态函数调用和类型信息获取能力。本文将详细介绍如何利用CPP-Reflection库实现这些高级功能,帮助开发者轻松掌握C++反射的实用技巧。 ## 一、CPP-Reflection框架简介 CPP-Reflection项目主要包含三个可构建部分:[

gitblog_00342的博客 410
上一篇: 虚函数的静态解析
下一篇: static_cast,dynamic_cast,const_cast详解
GodFishhh
博客等级 码龄5年 706粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值