当前位置: 首页 > news >正文

c++ typeid运算符

typeid运算符能获取类型信息。获取到的是type_info对象。type_info类型如下:

可以看到,这个类删除了拷贝构造函数以及等号操作符。有一些成员函数:hash_code、before、name、raw_name,  还重载了==和!=运算符。

测试:

void testTypeId() {//获取一个普通变量的类型信息unsigned int n = 9527;const type_info& nInfo = typeid(n); // 得到type_info 对象std::cout << "普通变量的类型信息:" << nInfo.name() << " | " << nInfo.raw_name() << " | " << nInfo.hash_code() << endl;//获取一个普通类型的类型信息const type_info& charInfo = typeid(char);std::cout << "普通类型的类型信息:" << charInfo.name() << " | " << charInfo.raw_name() << " | " << charInfo.hash_code() << endl;//获取一个字面量的类型信息const type_info& dInfo = typeid(95.27);std::cout << "字面量的类型信息:" << dInfo.name() << " | " << dInfo.raw_name() << " | " << dInfo.hash_code() << endl;class Base {};struct MyStruct {};//获取一个对象的类型信息Base obj;const type_info& objInfo = typeid(obj);std::cout << "对象的类型信息:" << objInfo.name() << " | " << objInfo.raw_name() << " | " << objInfo.hash_code() << endl;//获取一个结构体的类型信息const type_info& stuInfo = typeid(struct MyStruct);std::cout << "结构体的类型信息:" << stuInfo.name() << " | " << stuInfo.raw_name() << " | " << stuInfo.hash_code() << endl;//获取一个表达式的类型信息const type_info& expInfo = typeid(9528 - 1);std::cout << "表达式的类型信息:" << expInfo.name() << " | " << expInfo.raw_name() << " | " << expInfo.hash_code() << endl;
}

打印:

typeid运算符能用于类型比较。

基本类型比较,代码:

// 测试基本类型:
char* str;
int a = 9527;
int b = 1;
float f;
std::cout << "typeid(int) == typeid(int) ? " << (typeid(int) == typeid(int)) << endl;
std::cout << "typeid(int) == typeid(char) ? " << (typeid(int) == typeid(char)) << endl;
std::cout << "typeid(char) == typeid(char*) ? " << (typeid(char) == typeid(char*)) << endl;
std::cout << "typeid(str) == typeid(char*) ? " << (typeid(str) == typeid(char*)) << endl;
std::cout << "typeid(a) == typeid(int) ? " << (typeid(a) == typeid(int)) << endl;
std::cout << "typeid(a) == typeid(b) ? " << (typeid(a) == typeid(b)) << endl;
std::cout << "typeid(a) == typeid(f) ? " << (typeid(a) == typeid(f)) << endl;
std::cout << "typeid(a - b) == typeid(int) ? " << (typeid(a - b) == typeid(int)) << endl;

打印:

类的比较,代码:

// 类的比较:
class Sub : public Base {};
Base obj1;
Base* p1;
Sub obj2;
Sub* p2 = new Sub;
p1 = p2;
std::cout << "typeid(obj1) == typeid(p1) ? " << (typeid(obj1) == typeid(p1)) << endl;
std::cout << "typeid(obj1) == typeid(*p1) ? " << (typeid(obj1) == typeid(*p1)) << endl;
std::cout << "typeid(obj1) == typeid(obj2) ? " << (typeid(obj1) == typeid(obj2)) << endl;
std::cout << "typeid(p1) == typeid(Base*) ? " << (typeid(p1) == typeid(Base*)) << endl;

相关文章:

  • [Windows] Dism++_Mod系统清理优化利器v10.1.1002.1B绿色魔改版
  • 【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 文件事件处理部分)
  • 大数据运维过程中常见的一些操作
  • 【Dv3Admin】工具分页配置文件解析
  • TomatoSCI分析日记:数据分析为什么用csv不用excel
  • javaScirpt学习第五章(函数)-第二部分
  • AI学习笔记(一)背景学习
  • 编辑器之神 Vim
  • 前端面经 协商缓存和强缓存
  • OldRoll复古胶片相机:穿越时光,定格经典
  • 什么是特性阻抗
  • 表单校验代码和树形结构值传递错误解决
  • PCIE硬件管脚顺序问题解决方案
  • MySQL强化关键_018_MySQL 优化手段及性能分析工具
  • 高并发抽奖系统优化方案
  • 守护生命之光:进行性核上性麻痹的全方位健康护理指南
  • Vue事件处理
  • cf每日刷题
  • 【MySQL】索引下推减少回表次数
  • Vue 核心技术与实战day07
  • phpcmsv9中英文网站/网络推广与推广
  • 建网站 网站内容怎么做/武汉网站排名提升
  • 页面设计介绍/网站关键词优化技巧
  • seo和网站建设那个先学/怎样优化网站关键词排名靠前
  • 做知乎网站社区要多少钱/seo优化上海牛巨微
  • 设计师网站1688/跨境电商平台推广