码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 数据类型判断 typeid

时间:2019-12-01 15:16:33      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:cpp   比较   判断   地址   对象   ble   stream   ios   image   

#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;
}

  

技术图片

 

C++ 数据类型判断 typeid

标签:cpp   比较   判断   地址   对象   ble   stream   ios   image   

原文地址:https://www.cnblogs.com/alexYuin/p/11966101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!