c++ - 获取变量类型之typeid()

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一起 coding,一起学习,一起进步 —— sunshine

typeid() 定义

  • 在c++中,typeid用于返回变量、指针或引用所指对象的实际类型
  • 需要注意的是 typeid是操作符,不是函数!类似与sizeof 计算变量或者是类型所占空间大小

typeid() 使用

  • 运行时获知变量类型名称,可以使用 typeid(变量).name(),需要注意不是所有编译器都输出"int"、"float"等之类的名称,对于这类的编译器可以这样使用:float f = 1.1f; if( typeid(f) == typeid(0.0f) ) ……

  • 对非引用类型,typeid是在编译时期识别的,只有引用类型才会在运行时识别。

typeInfo 头文件

<typeinfo> 是C++标准库中的一个头文件,定义了C++标准中用于运算符b:typeid返回结果类型及抛出的异常类型。

  • type_info:包含着一个类型的信息。可以通过成员函数name()来获知其名字字符串。是运算符b:typeid返回结果类型。
  • bad_typeid:异常类型。当typeid表达式的实参为null时抛出该异常。
  • bad_cast:异常类型。当一个无效的dynamic_cast表达式执行时抛出该异常。
使用示例
#include <iostream>
#include <typeinfo>
 
struct Base { virtual ~Base() = default; };
struct Derived : Base {};
 
int main() {
	Base b1;
	Derived d1;
 
	const Base *pb = &b1;
	std::cout << typeid(*pb).name() << '\n';
	pb = &d1;
	std::cout << typeid(*pb).name() << '\n';
}

<typeinfo> 源码结构

源自 cppreference.com

Classes
type_infocontains some type’s information, generated by the implementation. This is the class returned by the typeid operator. (class)
bad_typeidexception that is thrown if an argument in a typeid expression is null (class)
bad_castexception that is thrown by an invalid dynamic_cast expression, i.e. a cast of reference type fails (class)
Synopsis
namespace std {
  class type_info;
  class bad_cast;
  class bad_typeid;
}
Class std::type_info
class type_info {
public:
  virtual ~type_info();
  bool operator==(const type_info& rhs) const noexcept;
  bool operator!=(const type_info& rhs) const noexcept;
  bool before(const type_info& rhs) const noexcept;
  size_t hash_code() const noexcept;
  const char* name() const noexcept;
  type_info(const type_info& rhs) = delete; // cannot be copied
  type_info& operator=(const type_info& rhs) = delete; // cannot be copied
};
Class std::bad_cast
class bad_cast : public exception {
public:
  bad_cast() noexcept;
  bad_cast(const bad_cast&) noexcept;
  bad_cast& operator=(const bad_cast&) noexcept;
  const char* what() const noexcept override;
};
Class std::bad_typeid
class bad_typeid : public exception {
public:
  bad_typeid() noexcept;
  bad_typeid(const bad_typeid&) noexcept;
  bad_typeid& operator=(const bad_typeid&) noexcept;
  const char* what() const noexcept override;
};

参考:

[1] https://baike.baidu.com/item/typeid/10657940

[2] https://zh.wikibooks.org/zh-hans/C%2B%2B/Typeinfo

[3] https://en.cppreference.com/w/cpp/header/typeinfo

C++的标识符 C++的标识符1.endl-----换行2. 1.endl-----换行 cout<<endl; 2. 阅读详情

相关推荐

CPRI原理及应用--基本原理

本文主要介绍CPRI的基本原理,包括CPRI的发展历程、CPRI基本协议、速率、帧结构、时延模型等

u014035968的博客 2万+

C++ 如何从指针中得到类型或引用

C++标准语法中我们可以通过 * 来定义指针 &来指定引用,不过我们似乎没有直接的方法可以用一个指针定义一个指针所指类型的引用或原始类型,本文所述方法即用来解决此问题

我的幻想之都 4169

Kali Linux实战:Aircrack-ng破解Wi-Fi密码的完整流程与常见问题解决

本文详细介绍了在Kali Linux中使用Aircrack-ng套件进行Wi-Fi密码破解的完整流程,包括环境准备、无线网卡配置、网络扫描、握手包捕获与字典破解等关键步骤。同时针对无线网卡不支持监听模式、无法捕获握手包等常见问题提供了实用解决方案,帮助安全研究人员有效评估无线网络安全性。

weixin_29323049的博客 266

typeid详解

在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid。     dyn

aci353的专栏 614

简单运用typeid搞清C++ 声明时 *[]const& 的作用方式

int m3;int* n3;输出:A3_A2_iA3_A2_Pi // 可以看作三行二列 int指针 的 数组,不是我想要的结果让我们再来看看&m的类型:输出:PA3_A2_i将之前的声明改正:int (*n)3;输出:PA3_A2_i // 可以看作三行二列int 的 指针[]优先级最高,与变量名结合后即变成数组类型。而如果用括号让*与变量名先结合,即可作为指针类型。n = &m;

weixin_49108488的博客 235

C++:typeid()查看变量类型

调用typeid函数查看变量类型

qq_28414091的博客 633

C/C++,判断变量的类型

c语言、c++语言判断变量类型

程序员的一天 4万+

c++ typeid().name()获取变量类型

简介 typeidC++的关键字之一,等同于sizeof这类的操作符。 typeid操作符的返回结果是名为type_info的标准库类型的对象的引用, 故需要包含头文件:#include <typeinfo>. typeid(a).name()可以返回变量a的类型; 举例 #include <iostream> #include <typeinfo&gt...

QFJIZHI的博客 2180

【C/C++获取变量类型的函数typeid()

获取变量类型的函数typeid()

Ananbei的博客 1万+

C++ 获取变量类型 decltype 和 (typeid().name)

C++11中新增了一个关键字decltype,其功能是在编译时期进行自动类型推导,与auto类似,但是两者的具体使用方式不同。decltype 全称 declare type,意思是 “声明类型”

m0_64240990的博客 1251

获取C++变量类型的方法

定义了一个模板函数type_name(),可以对传入的模板类型T进行类型判断,结合指针、左值/右值引用、常类型,准确得出变量的类型。在调用该函数时使用了`decltype`关键字,传入待确定的变量,然后输出变量类型

sky4403的博客 4788

typeid().name()获取类型名

#include #include//需要添加的头文件 using namespace std; void main() { //typeid().name()可以返回变量、函数、类的数据类型名,功能是相当强大的 //注意:对非引用类型,typeid().name()是在编译时期识别的,只有引用类型才会在运行时识别 const int a = 10; cout << typeid(&a)

风清扬 4503

typeid关键字

typeid关键字 作用: typeid()操作符的作用就是获取一个表达式的类型。返回结果是const type_info&类型。 注意: 1.不同编译器实现的type_info class各不相同。但c++标准保证它会实现一个name()方法,该方法返回类型名字的c-style字符串。 2.typeid操作符用于判断表达式的类型,它和sizeof一样是一个操作符而不是函数。 3.如果需要使用typeid操作符,最好加上typeinfo头文件。 使用方法: typeid(类型或变量或表达

DULUDULUDA的博客 561

C++打印变量的类型

好消息是,C++考虑到了这部分需求,并实现了。在C语言中,并没有什么方法能让编译器告诉我们某个变量的类型。

weixin_67916525的博客 463

C++判断变量/对象/枚举类型的简单方式

关键点 <typeinfo> 使用typeid()操作符所需包含的头文件。 typeid() 获取变量类型信息的操作符,其返回值类型为std::typeinfo。我们可使用typeid(n) == typeid(int)的方式来判断变量n是否为类型int。 注:可以使用typeid().name()获取变量类型名,但通常都不是我们所熟知的类型名称,而且比较奇怪的字符串,比如int类型,得到的name()为i。 示例 #include <typeinfo> #include

游行天涯 15万+

1、typeid

cpp中获取类型名

weixin_42636062的博客 696

c++ 如何获得一个变量的类型名称?

#include ...    TYPE a;    ...typeid(a).name();...

Deep in My Heart 8075

C++ 查询某个变量的类型

#include <typeinfo> int iii = 100; printf("%s\n",typeid(iii).name());//类型 详见:http://www.cnblogs.com/SZxiaochun/p/7691574.html 转载于:https://www.cnblogs.com/SZxiaochun/p/7692636.html...

dongbi0665的博客 363

获取C++变量类型的简单方法

12345678910111213int//32位整数 4字节 4byte 32bitint//无符号32位整数 4字节 4byte 32bitsignedint//有符号32位整数 4字节 4byte 32bitlong//32位整数 4字节 4byte 32bitlong//无符号32位整数 4字节 4byte 32bitdouble//双精度浮点数float//单精度浮点数longdouble//长双精度浮点数longlong。

raoxiaoz0425的博客 164

c++求变量或者常量的类型记录(目的是为了实现编译器中的类型转换)

1.头文件 #include <typeinfo> 2.方法返回值 typeid是一个关键字 引用typeid(变量名).name()方法会返回type_info里面定义的所有变量类名(依赖于具体编译器),返回值是一个const char* 类型的指针 3.typeid(变量名).name()方法的使用和Devc++使用的gcc编译器返回的变量类型名 #include &...

qq_44658941的博客 80
上一篇: 微信小程序开发 - WMusicPlayer登录注册模块
下一篇: 【有图有真相】再也不怕用 idea 导出 war 包了
sunshine2285
博客等级 码龄9年 23粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值