复杂部分略去,摘录要素如下:

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的更多相关文章

  1. JavaScript中判断对象类型方法大全1

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  2. JavaScript中判断对象类型的种种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  3. jquery中关于对象类型的判断原理

    class2type[ core_toString.call(obj) ] jquery中关于对象类型的判断原理 jquery源码中关于类型判断的工具函数为type,调用方法为$.type()或者jQ ...

  4. 转 JavaScript中判断对象类型的种种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  5. 获得函数返回值类型、参数tuple、成员函数指针中的对象类型

    //function_traits.h,获得函数返回值类型.参数tuple.成员函数指针中的对象类型 //参考https://github.com/qicosmos/cosmos/blob/maste ...

  6. js中判断对象类型的几种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  7. Python中的对象类型的初步介绍

    一:介绍 1.为什么使用内置对象 对象类型是语言的一个部分 内置对象构成了每个python程序的核心部分 2.核心数据类型 数字 字符串 列表 字典 元组 文件 集合 其他类型 编程单元类型 与实现相 ...

  8. JavaScript中判断对象类型方法大全2

    在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String:复杂数据类型是Object,Object ...

  9. 浅谈String中的==和对象中引用对象类型的==

    @Test public void test02() { StringBuffer sb = new StringBuffer(); sb.append('a'); sb.append(11); Sy ...

随机推荐

  1. Ubuntu16.04的搭建l.2.t.p.d(宿舍访问公司内网)

    主要的实现步骤 openswan(ipsec) : 提供一个密钥 ppp :提供用户名和密码 xl2tpd : 提供L2TP服务 sysctl : 提供服务器内部转发 iptables : 提供请求从 ...

  2. 014.统一建模语言UML

    1.UML 的设计目的 UML是为了简化和强化现有的大量面向对象开发方法这一目的而开发的. UML 适用于各种软件开发方法.软件生命周期的各个阶段.各种应用领域以及各种开发工具,是一种总结了以往建模技 ...

  3. win7 安装vb6

    1. 用setup.exe有问题,用acmsetup.exe 2.打开setupwiz.ini,把"acme=acmboot.exe"改为"=setup\acmsetup ...

  4. Tomcat 配置介绍

    参数说明: maxThreads: 最大可以创建请求的线程数 minSpareThreads: 服务启动时创建的处理请求的进程数 Connector中的port: 创建服务器端的端口号,此端口监听用户 ...

  5. 分布式系统全局唯一ID的生成

    分布式系统全局唯一ID的生成 一 .什么是分布式系统唯一ID ​ 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识. ​ 如在金融.电商.支付.等产品的系统中,数据日渐增长,对数据分库分表后 ...

  6. js数据类型详解

    一.js数据类型分类 (1)原始数据类型(值类型) null 空类型,变量声明了并赋值为null.转化为数字是0 undefined 未定义,变量声明了但未赋值.转化为数字为NaN boolean 布 ...

  7. rsync 服务端和客户端 简单配置

    环境:Centos 6.9 两台服务器,A(192.168.223.129) 和 B(192.168.223.130).A 作为服务端,B作为客户端从A服务器同步目录.把A的/usr/src 目录下的 ...

  8. requests---session简介

    http协议是无状态的,也就是每个请求都是独立的.那么登录后的一系列动作,都需要用cookie来验证身份是否是登录状态,为了高效的管理会话,保持会话,于是就有了session session简介 se ...

  9. Rust中的迭代器

    和闭包一样,练代码 struct Counter { count: u32, } impl Counter { fn new() -> Counter { Counter {count: } } ...

  10. 201871010109-胡欢欢《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...