zoukankan      html  css  js  c++  java
  • C++ 数据类型判断 typeid

    #include <iostream>
    
    // typeid testing
    
    
    //////////////////////////////////////////////////////////
    
    int main()
    {
    	{
    		int v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    
    	{
    		long v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    
    	{
    		float v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    
    	{
    		double v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    
    	{
    		char v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    
    	{
    		uint8_t v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    	
    	{
    		uint16_t v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    
    	{
    		uint32_t v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    
    	{
    		uint64_t v(0);
    		std::cout << typeid(v).name() << std::endl;
    		std::cout << typeid(v).raw_name() << std::endl;
    	}
    
    	return 0;
    }
    

      

    使用示例

    #include <iostream>
    
    // typeid testing
    
    
    //////////////////////////////////////////////////////////
    
    int main()
    {
    	int a(0);
    
    	// 错误调用!!!!!!
    	// 比较两个字符串不能直接使用 ==
    	// 这是两个 cosnt char * 类型的变量,==执行的是地址的比较。所以会返回false!!!!
    	if (typeid(a).name() == "int")
    	{
    		// do something
    		std::cout << "It is integer. by name" << std::endl;
    	}
    
    	
    	// 使用string来比较ok
    	if (std::string(typeid(a).name()) == "int")
    	{
    		// do something
    		std::cout << "It is integer. if (std::string(typeid(a).name()) == "int")" << std::endl;
    	}
    
    	// 这样也可以,返回的是同一个对象,字符串的地址自然也一样。
    	auto p1 = typeid(a).name();
    	auto p2 = typeid(1).name();
    	if (typeid(a) == typeid(1)) // 比较对象
    	{
    		// do something
    		std::cout << "It is integer. if (typeid(a) == typeid(1))" << std::endl;
    	}
    
    	if (typeid(a) == typeid(1.0f)) // 比较对象
    	{
    		// do something
    		std::cout << "It is integer. if (typeid(a) == typeid(1.0f))" << std::endl;
    	}
    
    	if (typeid(a) == typeid(int(1.0))) // 比较对象
    	{
    		// do something
    		std::cout << "It is integer. if (typeid(a) == typeid(int(1.0)))" << std::endl;
    	}
    
    	return 0;
    }
    

      

  • 相关阅读:
    [nginx]简单内容管理系统的spring项目的nginx.conf配置文件的注释理解
    [日常填坑]部署使用Idea开发的spring框架的多模块项目到服务器
    [日常填坑]centos7.0+版本服务器安装jdk9或者jdk10
    [日常填坑]centos7.0+版本服务器安装mysql
    机器学习实战之kNN算法
    机器学习实战之机器学习主要任务
    模式字符串匹配问题(KMP算法)
    ubuntu 更新引导命令
    ubuntu 14.04 中找不到 libgtk-x11-2.0.so
    maven project 更新总是jre-1.5
  • 原文地址:https://www.cnblogs.com/alexYuin/p/11966101.html
Copyright © 2011-2022 走看看