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

c++中的类型转换

时间:2019-04-18 22:05:02      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:nio   建议   UNC   指针   erp   报错   div   子类   对象   

c++提供四种类型转换

技术图片

static_cast转换内置数据类型和具有继承关系的指针和引用


class Building{};
class Animal{};
class Cat :public Animal{};

void test01()
{
	int a = 97;
	char c = static_cast<char>(a);
	cout << c << endl;
	//父类指针转换为子类指针
	Animal *ani = NULL;
	Cat *cat = static_cast<Cat*>(ani);
	//子类指针转换为父类指针
	Cat *soncat = NULL;
	Animal *anifather = static_cast<Animal*>(soncat);
	//引用
	Animal aniobj;
	Animal &aniref = aniobj;
	Cat&cat = static_cast<Cat&>(aniref);

	Cat catobj;
	Cat&catref = catobj;
	Animal &anifather2 = static_cast<Animal&>(catref);
}

 

dynamic_cast转换具有继承关系的指针或引用,在转换之前进行对象类型检查
  子类指针可以装换为父类指针(从小到大),类型安全
  父类指针转换为子类指针(从小到大),不安全

void test02()
{
	Animal*ani = NULL;
	Cat*cat = dynamic_cast<Cat*>(ani);//报错原因在于dynamic_cast做类型安全检查

	Cat*cat = NULL;
	Animal *ani = dynamic_cast<Animal*>(cat);
}
结论:dynamic只能转换具有继承关系的指针或者引用,并且只能由子类型转换成基类型

 const_cast  指针 引用或者对象指针

增加或者去除变量的const性
void test03()
{
	//1.基础数据类型
	int a = 10;
	const int &b = a;
	int &c = const_cast<int&>(b);
	c = 20;
	//2.指针
	const int*p = NULL;
	int *p2 = const_cast<int*>(p);

	int *p3 = NULL;
	const int *p4 = const_cast<const int *>(p3);
	
}

  

reinterpret_cast强制类型转换 无关的指针类型 包括函数指针都可以

typedef void(*FUNC1)(int, int);
typedef int(*FUNC2)(int, char*);
void test04()
{
	//1.无关的指针类型都可以进行转换
	Building*building = NULL;
	Animal* ani = reinterpret_cast<Animal*>(building);

	//2.函数指针转换
	FUNC1 func1;
	FUNC2 fun2 = reinterpret_cast<FUNC2>(func1);
}

  

提示:必须清楚的知道要转变的变量,转换前是什么类型,转换后是什么类型
一般情况下,不建议类型转换,避免进行类型转换

 

c++中的类型转换

标签:nio   建议   UNC   指针   erp   报错   div   子类   对象   

原文地址:https://www.cnblogs.com/qq209049127/p/10732417.html

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