17 C++ 强行转换 static_cast, dynamic_cast,const_cast,reinterpret_Cast 相关

1.static_cast<type>(value);

编译时进行
//type:要转成啥类型?
//value:要转的值
//大家理解成“正常转换”,


//可用场景:


//a。相关类型转换,比如整型和实型之间的转换。
//
//b.子类转父类
//
//c.void * 和其他类型之间的转换。


//不可用场景转换


//不能用于指针类型之间的转换
//那么什么可以用于指针类型之间的转换呢? -->reinterpret_cast

class A {

};
class B :public A {

};

void main() {
//0.复习一下C语言的转换

	double d = 10.89;
	int a = (int)d;

	cout << a << endl;

	int aa = 19;
	int *pa = &aa;
	cout << *pa << endl;
	double *ppa = (double *)pa; //虽然可以这么转,build pass,但是使用时,肯定有问题,本来pa指向的是int,指向的是4个字节的数据,转成double *后,double *指向的是8个字节的数据,如果操作 *ppa,就会访问8个字节的数据
	cout << *ppa << endl; //不一定有异常,但是数据肯定不对,当前运行结果为:-9.25596e+61 


	//1.static_cast<type>(value);
//type:要转成啥类型?
//value:要转的值
//大家理解成“正常转换”,编译时进行
//可用场景:
//a。相关类型转换,比如整型和实型之间的转换。
//
//b.子类转父类
//
//c.void * 和其他类型之间的转换。


//d.不可用场景转换
//不能用于指针类型之间的转换
//那么什么可以用于指针类型之间的转换呢? -->reinterpret_cast
	
//代码演示
	//a。相关类型转换,比如整型和实型之间的转换。
	double a1 = 99.8;
	int a2 = static_cast<int>(a1);
	cout << a2 << endl;

	//b.子类转父类, A是父类,B是子类
	B b;
	A aaaaaa = static_cast<A>(b);

	//c.void * 和其他类型之间的转换。
	int aaa = 19999;
	int *paaa = &aaa;

	void * pvoid = static_cast<void *>(paaa);
	int * paaaaaa = static_cast<int *>(pvoid);
	cout << *paaaaaa << endl; //结果正确,19999


}

2. dynamic_cast 

运行时转换

主要是将 父类转换成子类

TODO:

3.const_cast 作用不大

将指针或者应用的const 属性去除

注意是 去除const 属性

编译时转换

有啥用?仅仅是语法上support,自己能看懂别人的代码即可

4.reinterpret_Cast

重新解释类型,

编译时转换

可以自由转

应用场景:

将整型转成指针。

将一种指针转成另一种指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值