使用typeid(变量或类型).name()来获取常量或变量的类型

<typeinfo>  该头文件包含运行时类型识别(在执行时确定数据类型)的类

typeid的使用

 

typeid操作符        typeid表达式形如:      typeid(expr);
这里expr是任意表达式或者类型名。如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。
typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义),因此使用typeid操作符时要包含头文件typeinfo的预处理命令“#include <typeinfo>”。标准并没有确切定义type_info,它的确切定义编译器相关的,但是标准却规定了其实现必需提供如下四种操作:

 t1 == t2      如果两个对象t1和t2类型相同,则返回true;否则返回false
 t1 != t2   如果两个对象t1和t2类型不同,则返回true;否则返回false
 t.name()  返回类型的C-style字符串,类型名字用系统相关的方法产生
 t1.before(t2)  返回指出t1是否出现在t2之前的bool值


type_info类提供了public虚析构函数,以使用户能够用其作为基类。它的默认构造函数和拷贝构造函数及赋值操作符都定义为private,所以不能定义或复制type_info类型的对象。程序中创建type_info对象的唯一方法是使用typeid操作符(由此可见,如果把typeid看作函数的话,其应该是type_info的友元)。type_info的name成员函数返回C-style的字符串,用来表示相应的类型名,但务必注意这个返回的类型名与程序中使用的相应类型名并不一定一致(往往如此,见后面的程序),这是由实现所决定的,标准只要求实现为每个类型返回唯一的字符串。
 

 

常用的形式:typeid(常量或变量或表达式).name()   

//获取该常量或变量或表达式的数据类型名对应的字符串

例如 

int  a;     float b;

cout<<typeid(a).name(); //输出结果为变量a的数据类型名: int

cout<<typeid(b).name(); //输出结果为变量b的数据类型名:float

cout<<typeid(‘$’).name(); //输出结果为常量‘$’的数据类型名: char

注意:在c++中,typeid用于获知一个常量或变量的具体类型。(注意:typeid本身是操作符,不是函数!)

 

使用实例

  1. //使用typeid(变量或类型).name()来获取常量或变量的类型
  2. #include <typeinfo>  //使用类型获取函数必须包含此头文件
  3. #include <iostream>
  4. using namespace std;
  5. int main()
  6. {
  7. cout<< "常量1的数据类型:"<<typeid(1).name()<<endl;
  8. cout<< "常量1u的数据类型:"<<typeid(1u).name()<<endl;
  9. cout<< "常量1l的数据类型:"<<typeid(1l).name()<<endl;
  10. cout<< "常量3.14的数据类型:"<<typeid(3.14).name()<<endl;
  11. cout<< "常量3.14f的数据类型:"<<typeid(3.14f).name()<<endl;
  12. cout<< "常量\'1\'的数据类型:"<<typeid('1').name()<<endl;
  13. cout<< "常量\"1\"的数据类型:"<<typeid("1").name()<<endl;
  14. return 0;
  15. }

运行结果

使用typeid(变量或类型).name()来获取常量或变量的类型---gyy整理的更多相关文章

  1. C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)

    #include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...

  2. C语言入门教程-(4)常量和变量

    1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和 ...

  3. C语言回顾-常量和变量

    1.C语言共32个关键字 1)数据类型关键字 a.基本数据类型 void char int float double b.类型修饰关键字 short long signed unsigned c.复杂 ...

  4. Swift常量和变量

    常量和变量由一个特定名称来表示,如maxNumber 或者 message.常量所指向的是一个特定类型的值, 如数字10或者字符”hello”.变量的值可以根据需要不断修改,而常量的值是不能够被二次修 ...

  5. Swift常量和变量以及命名规范

    我们在上一章中介绍了如何使用Swift编写一个HelloWorld小程序,其中就用到了变量.常量和变量是构成表达式的重要组成部分.常量在声明和初始化变量时,在标识符的前面加上关键字let,就可以把该变 ...

  6. PHP的魔术常量(变量)、魔术方法(函数)、超全局变量

    https://www.cnblogs.com/ccw869476711/p/9183783.html 一.魔术常量(魔术变量) 概念:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位 ...

  7. JAVA String介绍、常量池及String、StringBuilder和StringBuffer得区别. 以及8种基本类型的包装类和常量池得简单介绍

    一.概述 String是代表字符串的类,本身是一个最终类,使用final修饰,不能被继承. 二.定义方式   方式一:直接赋值法 String str1 = "hello"; 方式 ...

  8. GetEnvironmentVariable 获取常用系统变量(转)

    源:GetEnvironmentVariable 获取常用系统变量 //譬如 WINDIR 表示系统目录系统变量, 以这样获: var s:string; begin s:=GetEnvironmen ...

  9. 获取Field成员变量类

    位于java.lang.reflect.Field包中 getModifiers() 成员变量修饰符(public.private) getName() 成员变量名字 getType() 成员变量类型 ...

随机推荐

  1. Js 中的this

    关于this This代表"当前"对象 谁调用就代表谁 行内绑定 不带参数 行内绑定 带参数 this 当前对象 Object HTMLInputElement 动态绑定 要获取自 ...

  2. CSS 样式二

    CSS文本样式 text-align:设置文本的对齐方式 取值: left 向左对齐 right:向右对齐 center:居中对齐 text-indent:设置文本的首行缩进 例如,字体设为12px, ...

  3. 第一节 Hibernate 基本配置

    1 新建maven工程 1)打开eclipse,依次点击File---->New---->Maven Project. 2)选择org.apache.maven.archetypes ma ...

  4. DEDECMS中,自增长标签

    自增长 arclist 标签下使用 [field:global.autoindex/] 默认从1开始 channel 标签下使用 [field:global.autoindex/] 默认从0开始 ch ...

  5. C#使用反射工厂模式遇到System.TypeLoadException(类名错误导致)

    项目中,在运行另一个反射类时出现问题,未能从程序集中加载类 class PopUpActionFactory { public static InterfacePopUpAction getActio ...

  6. PHP 魔术方法 __clone __toString(五)

    __clone() - 当对象克隆的时候自动加载此方法 __toString() - 当对象需要echo打印输出的时候自动加载此方法 __clone() <?php class example{ ...

  7. yum的一些用法

    对于配置仓库这里就不做讲解了,这里只是列出比较实用的yum的用法 yum install packagename                #安装软件包 yum remove  packagena ...

  8. 使用fiddler4做代理调试手机页面

    由于一般手机不能改host,手机页面如果涉及到各个域名ip的混合使用,在手机上调试看效果非常麻烦. 使用fiddler4做代理,手机跟电脑连到同一个局域网,手机上网通过电脑做个代理上网,那么一切请求就 ...

  9. Asp.net Response.Redirect with post data

    string url = String.Format("{0}://{1}/{2}", Request.Url.Scheme, Request.Url.Authority, &qu ...

  10. Mongodb学习使用记录

    在学习使用Mongodb中,对map和reduce的定义,以及对 mapReduce() 方法的调用: >map #在直接输入map时会出现一个'map is not defined'的异常错误 ...