c++中获得对象类型 typeid 与 type_info
复杂部分略去,摘录要素如下:
1.typeid是C++的关键字之一,等同于sizeof这类的操作符。
2.typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义)
3.C++并没有规定typeid实现标准,各个编译器可能会不一样。
4.编译器会为每一种typeid操作的类型生成一份保存在数据段的type_info数据。
5.每种类型的type_info数据长度依赖于类型名称,至少9个字节。
个人实测总结如下:
1.返回类型
typeid返回的是type_info的引用,这个类不能拷贝,也不能自己构造。
在语法上要使用const type_info & 类型来定义一个对象
type_info.name()的返回类型是一个const char* 静态字符串
2.可用操作集
-> 创建一个引用对象 const type_info& t0 = typeid(int);
-> 获得类型名称 const char* b=t0.name();
cout<<b<<" " <<t0.name()<<endl;
->比较对象是否相等,仅支持2种比较符
t1 == t2 ,t1 != t2
程序实例:
#include<iostream>
#include<typeinfo>
#include<cstring>
using namespace std;
int main(void){
int i = 1;
float f = 1.222;
//定义引用对象
const type_info& t1 = typeid(f);
const type_info& t2 = typeid(int);
//获得类型名称
const char* a=t1.name();
const char* b=t1.name();
//比较对象相等
cout<<"ti==t2 ? "<< t1==t2<<endl;
return 0;
}
3.不同编译器的机能的理解
在devc++5.11中
float f = 1.222;
cout<<typeid(f).name();
输出
>>f
在vs2013中
float f = 1.222;
cout<<typeid(f).name();
输出
>>float
可见简陋的devc++,对于变量的类型处理不科学。
会直接创建一个新的type_info对象,储存的private:name 是传入的变量名称
但是在devc++中直接输入类型名称是可以的
float f = 1.222;
cout<<typeid(float).name();
输出
>>float
只要输入的是类型名称,后续的其他操作,例如比较typeid(float)==typeid(int),在devc++中都是正常的。
c++中获得对象类型 typeid 与 type_info的更多相关文章
- JavaScript中判断对象类型方法大全1
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
- JavaScript中判断对象类型的种种方法
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
- jquery中关于对象类型的判断原理
class2type[ core_toString.call(obj) ] jquery中关于对象类型的判断原理 jquery源码中关于类型判断的工具函数为type,调用方法为$.type()或者jQ ...
- 转 JavaScript中判断对象类型的种种方法
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
- 获得函数返回值类型、参数tuple、成员函数指针中的对象类型
//function_traits.h,获得函数返回值类型.参数tuple.成员函数指针中的对象类型 //参考https://github.com/qicosmos/cosmos/blob/maste ...
- js中判断对象类型的几种方法
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
- Python中的对象类型的初步介绍
一:介绍 1.为什么使用内置对象 对象类型是语言的一个部分 内置对象构成了每个python程序的核心部分 2.核心数据类型 数字 字符串 列表 字典 元组 文件 集合 其他类型 编程单元类型 与实现相 ...
- JavaScript中判断对象类型方法大全2
在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String:复杂数据类型是Object,Object ...
- 浅谈String中的==和对象中引用对象类型的==
@Test public void test02() { StringBuffer sb = new StringBuffer(); sb.append('a'); sb.append(11); Sy ...
随机推荐
- nodejs-翻转算法
nodejs-翻转算法 /** * Created by moon on 2019/12/14. */ //程序运行完成时一定要有输出语句,本工具才能正确展示运行结果. function abc() ...
- Java自学-集合框架 List接口
ArrayList与List接口 步骤 1 : ArrayList和List ArrayList实现了接口List 常见的写法会把引用声明为接口List类型 注意:是java.util.List,而不 ...
- Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)
Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...
- 软件设计师14-UML建模
UML图 用例图 用例图:参与者.用例 用例之间的关系:包含关系.扩展关系.泛化关系. 用例的包含关系:查询数据外借信息包含用户登录. 用例的扩展关系:修改之前要先查询,则修改信息包含查询信息用例 类 ...
- ssh-agent的作用
明明在github上配置了ssh公钥,拉代码时却报错: sign_and_send_pubkey: signing failed: agent refused operation 解决方法:在~/.z ...
- 【Java】简体中文、繁体中文转换
项目中用到繁体中文语言适配,目前已经有开源的框架可以将简体中文转换成繁体中文,在此基础上封装了一个工具类,可以直接将简体中文的strings.xml转换成繁体中文的strings.xml. 引用Jar ...
- 电信NBIOT 3 - 数据下行
电信NBIOT 1 - 数据上行(中国电信开发者平台对接流程) 电信NBIOT 2 - 数据上行(中间件获取电信消息通知) 电信NBIOT 3 - 数据下行 电信NBIOT 4 - NB73模块上行测 ...
- 你所不知的 PHP 断言(assert)
PHP 中的断言常用于调试,检查一个表达式或语句是否为 FALSE.本文带你重新认识 PHP assert() 函数的神(Qi)通(Yin)广(Ji)大(Qiao). 本文基于 PHP Version ...
- bat脚本弹出消息示例(msg命令详细解释)
弹出消息的bat,其实就是通过批处理调用msg命令,msg是系统自在的一个可以发送信息的命令. 示例: @echo off rem 测试MSG msg * "ok" rem 测试M ...
- I2C 挂死,SDA一直为低问题分析【转】
转自:https://blog.csdn.net/winitz/article/details/72460775 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...