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

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. var变量

    # Aduthor:CCIP-Ma name = "ma" name2 = name name = "ccip-ma" print("My name ...

  2. Java自学-集合框架 LinkedList

    Java集合框架 LinkedList 序列分先进先出FIFO,先进后出FILO FIFO在Java中又叫Queue 队列 FILO在Java中又叫Stack 栈 示例 1 : LinkedList ...

  3. vuePress自动部署到Github Page脚本踩坑

    背景 照着官网的教程来就行了,踩了个小坑,记录一下,希望对你有帮助 这是部署后的效果 小坑1 如图所示,官网推荐部署命令 然而windows 没有bash 指令, 直接运行报错 两个解决方法: 项目根 ...

  4. Android 拖动条/滑动条控件、星级评分控件

    ProgressBar有2个子控件: SeekBar   拖动条控件 RatingBar   星级评分控件 1.拖动条控件 <SeekBar android:layout_width=" ...

  5. 动态改变伪元素样式的方(用:after和:before生成的元素)

    自己查资料总结的两种方法 一.纯css改变 a:hover:before{left:-20%;} a:hover:after{right:-20%;} a:before{ left:-100%; } ...

  6. linux epoll,poll,select

    epoll函数用法,还有点poll和select 1,LT的epoll是select和poll函数的改进版. 特点是,读完缓冲区后,如果缓冲区还有内容的话,epoll_wait函数还会返回,直到把缓冲 ...

  7. Python乘法口诀表

    乘法口诀表 print("乘法口诀表") for i in range(1,10):     for j in range(1,i+1):         print(str(i) ...

  8. packstack快速部署openstack

    环境准备 建议16GB RAM sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config systemctl stop firewall ...

  9. Springboot的entity,dao,controller,service层级理解

    1.Dao层:持久层,主要与数据库交互 DAO层首先会创建Dao接口,接着就可以在配置文件中定义该接口的实现类:接着就可以在模块中调用Dao的接口进行数据业务的处理,而不用关注此接口的具体实现类是哪一 ...

  10. windows API下的模板缓冲(stencil buffer)

    在windows API搭建的OpenGL窗口中使用模板缓冲,需要在像素格式描述表中设置stencil buffer位宽为8,这样窗口会自动生成stencil buffer,然后可以在opengl环境 ...